网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  使用回调和线程处理一个耗时响应全过程     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:79次  录入:管理员--2007-11-16  
 

现在程序中有许多涉及长耗时响应过程的处理,比如访问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

这说明,程序是异步执行的,耗时过程没有影响到主干程序的运行,而耗时过程完成后,才把返回结果通知了调用者,主干程序没有受到耗时过程的影响,因此也就不会导致界面停顿,响应停止,无谓等待等缺陷。

以上就是使用回调和线程处理一个耗时响应的整个过程。

 
 
上一篇: 新手入门:简单介绍jdk5.0中的内置工具    下一篇: 对两代不同的corba对象生命周期的慨述
  相关文档
2004年11月11日 11-17
j2ee应用开发中与oracle数据库的连接(1) 11-16
面向对象编程:java中的抽象数据类型 12-10
java应用者与ide环境 11-17
面向java开发人员db4o指南:数组和集合 11-16
j2ee综合 svn配置手记 11-17
实战 j2ee 开发购物网站 开发环境篇 11-17
strike 方法 11-16
java实现ftp功能(源程序) 11-17
java列表对象的性能分析和测试(1) 11-16
java 应用程序中的按值传递语义 11-17
关于finalize()方法的解释 11-17
线性表的使用 11-17
java socket编程(三)-2 11-17
漫谈hibernate的前世今生 11-16
分页显示从数据库中读出的记录 11-16
运用bitset类来处理一系列选项 11-17
java中四种xml解析技术之不完全测试 11-16
入门基础 Java参数传递方式 08-06
java编程实战篇:设计自己的annotation 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息