春天里,百花香...
现在程序中有许多涉及长耗时响应过程的处理,比如访问WebService,远程调用,复杂处理等,如果我们使用直接顺序执行的方式进行处理有可能导致界面停顿,响应停止,无谓等待等缺陷,这是不应该的。 一个耗时响应过程应该采用回调和线程来处理,具体就是把原来的顺序执行修改为异步方式,并让被调用者调用调用者以获得执行结果。在附件的例子中,Viewer就是调用者,它代表界面,而LongTimeResponse是被调用者,它内部用线程启动一个耗时过程,执行完毕再通知调用者。 Viewer类代码如下:
LongTimeResponse类代码如下,可以看出,它之所以能回调调用者,是因为其内部有调用者的引用viewer,在其构造函数中viewer被赋上了值:
调用过程如下:
执行起来可以看出,程序先输出了 New Count=123 过了十秒,才输出: New Count=1000 这说明,程序是异步执行的,耗时过程没有影响到主干程序的运行,而耗时过程完成后,才把返回结果通知了调用者,主干程序没有受到耗时过程的影响,因此也就不会导致界面停顿,响应停止,无谓等待等缺陷。 以上就是使用回调和线程处理一个耗时响应的整个过程。 这里可下载整个程序: http://www.blogjava.net/Files/sitinspring/Callback20070628133516.zip 例程2: http://www.blogjava.net/Files/sitinspring/MVCThreadCallback.rar
posted on 2007-06-28 13:49 sitinspring 阅读(2668) 评论(6) 编辑 收藏 所属分类: 线程Thread
讲得简单明了,是篇好文章。 回复 更多评论
这种东西都应该用FutureTask来做了。。 回复 更多评论
谢谢楼上指教. 回复 更多评论
在1.5以上的版本当然可以使用 future task 个人还没有发现 new thread 和 future task 的在应用时的主要区别 回复 更多评论
顺便说一句 一般的情况下程序性能的瓶颈并不是future task 和 new thread 的区别 更加应该把注意力放在其它耗时的代码上面 ex 业务操作 数据结构的重组...... 回复 更多评论
顶 回复 更多评论
Powered by: BlogJava Copyright © sitinspring