日期:2011-03-22 16:16:00 来源:本站整理
java操纵回调和线程处理一个耗时呼应全历程[Java编程]
本文“java操纵回调和线程处理一个耗时呼应全历程[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
这阐明,程序是异步履行的,耗时历程没有影响到骨干程序的运行,而耗时历程完成后,才把返回后果告诉了调用者,骨干程序没有遭到耗时历程的影响,因此也就不会招致界面停顿,呼应终止,无谓等候等缺陷.
以上就是利用回调和线程处理一个耗时呼应的整个历程.
以上是“java操纵回调和线程处理一个耗时呼应全历程[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论