java利用回和谐线程处理惩罚一个耗时响应全进程
此刻措施中有很多涉及长耗时响应进程的处理惩罚,好比会见WebService,长途挪用,巨大处理惩罚等,假如我们利用直接顺序执行的方法举办处理惩罚有大概导致界面搁浅,响应遏制,无谓期待等缺陷,这是不该该的。
一个耗时响应进程应该回收回和谐线程来处理惩罚,详细就是把本来的顺序执行修改为异步方法,并让被挪用者挪用挪用者以得到执行功效。在附件的例子中,Viewer就是挪用者,它代表界面,而LongTimeResponse是被挪用者,它内部用线程启动一个耗时进程,执行完毕再通知挪用者。
Viewer类代码如下:
public class Viewer{
private int count;
public Viewer(int count){
this.count=count;
}
public void printNewCount(int newCount){
System.out.println("New Count="+newCount);
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
LongTimeResponse类代码如下,可以看出,它之所以能回调挪用者,是因为其内部有挪用者的引用viewer,在其结构函数中viewer被赋上了值:
package com.sitinspring;
public class LongTimeResponse implements Runnable{
private Viewer viewer;
private int count;
public LongTimeResponse(Viewer viewer){
this.viewer=viewer;
this.count=viewer.getCount();
caculateNewCount();
}
private void caculateNewCount(){
Thread thread=new Thread(this);
thread.start();
}
public void run(){
try{
Thread.sleep(10000);
}
catch(Exception ex){
ex.printStackTrace();
}
viewer.printNewCount(count*count*count);
}
}
挪用进程如下:
Viewer viewer=new Viewer(10);
LongTimeResponse longTimeResponse=new LongTimeResponse(viewer);
viewer.printNewCount(123);
执行起来可以看出,措施先输出了
New Count=123
过了十秒,才输出:
New Count=1000
这说明,措施是异步执行的,耗时进程没有影响到骨干措施的运行,而耗时进程完成后,才把返回功效通知了挪用者,骨干措施没有受到耗时进程的影响,因此也就不会导致界面搁浅,响应遏制,无谓期待等缺陷。
以上就是利用回和谐线程处理惩罚一个耗时响应的整个进程。