`
lianxiangbus
  • 浏览: 527738 次
文章分类
社区版块
存档分类
最新评论

多线程编程 高级主题(一)

 
阅读更多

java实现异步调用



在JAVA平台,实现异步调用的角色有如下三个角色:

调用者取货凭证真实数据

一个调用者在调用耗时操作,不能立即返回数据时,先返回一个取货凭证.然后在过一断时间后
凭取货凭证来获取真正的数据.

所以连结调用者和真实数据之间的桥梁是取货凭证.我们先来看它的实现:

publicclassFutureTicket{
privateObjectdata=null;
privatebooleancompleted=false;

publicsynchronizedvoidmakeRealData(){
if(this.complited)return;
//获取数据的耗时操作.这里用Sleep代替
try{
Thread.sleep(10000);
}catch(Throwablet){}
this.data="返回的数据内容";
this.completed=true;
notifyAll();
}

publicsynchronizedObjectgetData(){
while(!this.completed)){
try{
wait();
}catch(Throwablet){}
}
returnthis.data;

}
publicbooleanisCompleted(){
returnthis.completed;
}
}

为了简单化说明(不把它们的关系开得复杂),这里用Object代替了真实数据.而真实的实现中
我们应该把makeData放在一个真实数据的类中,然后提供一个方法返回真实数据.这样对于真实
数据的处理和取货凭证解耦.

对于这个取货凭证,调用者的如何调用是异步调用的关键:

publcclassRequester{
publicFutureTicketrequest(){
finalFutureTicketft=newFutureTicket();

//在新线程中调用耗时操作
newThread(){
publicvoidrun(){
ft.makeRealData();
}
}.start();
returnft;
}
}
在新线程中启动耗时操作后,不等待线程的完成立即返回提货单.

然后调用者可以根据ft.isCompleted()来调用getData()获取真实数据.
当然对ft.isCompleted()测试可以按规定时间间隔轮巡(极低级的方案),也可以
在条件不满足时wait(),然后等待makeData的notifyAll();这样你就完成了一个
用JAVA模拟的异步操作.


改进:
但这样的调用对于调用者来说仍然要继续控制线程操作.如果调用者是一个资深的
程序员,这当然没有问题.但假如我们把对直接数据的处理委托给取货凭证来做.调用
者直接规定对数据的操作,然后由取货凭证来调用规定的操作,这对于调用者是一个很
好的解脱:

interfaceProcessData{
publicvoidprocess(Onjectdata);
}

publicMyProcessData{
publicvoidprocess(Objectdata){
//你不管什么时候起初数据data被获取了.
//你只要规定如果获取到数据了如何处理

System.out.println(data.toString()+"处理完成...........");
//insertintodataBase?
}
}

取货凭证在接收调用者请求获取数据时,要知道对获取的数据如何处理的方法:

publicclassFutureTicket{
privateObjectdata=null;
privatebooleancompleted=false;
privateProcessDatapd;

publicFutureTicket(ProcessDatapd){
this.pd=pd;
}
publicsynchronizedvoidmakeRealData(){
if(this.complited)return;
//获取数据的耗时操作.这里用Sleep代替
try{
Thread.sleep(10000);
}catch(Throwablet){}
this.data="返回的数据内容";
this.completed=true;
notifyAll();
}

publicsynchronizedvoidprocessData(){
while(!this.completed)){
try{
wait();
}catch(Throwablet){}
}
//returnthis.data;
//不用返回了,直接处理
this.pd.process(this.data);
//alert(?);

}


//这个方法也可以不要了.
publicbooleanisCompleted(){
returnthis.completed;
}
}

调用:

finalFutureTicketft=newFutureTicket(newMyProcessData());

//在新线程中调用耗时操作
newThread(){
publicvoidrun(){
ft.makeRealData();
}
}.start();
ft.processData();

OK,你现在可以抽烟,喝酒,泡妞.ft会为你完成所有的工作.

分享到:
评论
1 楼 遥远的救世主 2012-08-09  

相关推荐

    java 多线程设计模式 进程详解

    第八章 和同步相关的高级主题 同步术语 预防死锁 锁饥饿 非线程安全的类 总结 第九章 多处理器机器上的并行化 单线程程序并行化 内层循环线程化 循环输出 多处理器扩展 总结 第十章 线程组 线程组概念 创建线程...

    覆盖一系列高级主题,包括复杂的语法和特性、Python的高级编程技巧、常见的设计模式、并发编程、性能优化等

    这类书籍通常覆盖一系列高级主题,包括复杂的语法和特性、Python的高级编程技巧、常见的设计模式、并发编程、性能优化等。 具体内容可能包括: 高级语法和特性: 深入介绍Python的高级语法和特性,如生成器表达式...

    Qt高级编程---------源码

    《Qt高级编程》,作者: (英)Mark Summerfield ,《qt高级编程》以工程实践为主旨,是对qt现有的700多个类和上百万字参考文档中部分关键技术深入、全面的讲解和探讨,如丰富的网络/桌面应用程序、多线程、富文本处理...

    QT高级编程 中文版

    《qt高级编程》以工程实践为主旨,是对qt现有的700多个类和上百万字参考文档中部分关键技术深入、全面的讲解和探讨,如丰富的网络/桌面应用程序、多线程、富文本处理、图形/视图架构、模型/视图架构等;另外,除对每...

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关线程的书籍) OReilly.Java.Threads.3rd.Edition.Sep.2004.eBook-DDU ...第八章 和同步相关的高级主题 第九章 多处理器机器上的并行化 第十章 线程组

    C++编程基础知识概述

    C++是一种强大且广泛使用的编程语言,用于开发各种应用程序,从系统级应用到图形用户界面。...如果您想更深入地学习C++,可以探索面向对象编程、模板编程、多线程编程等更高级主题,以充分利用这门强大的编程语言。

    《Android高级编程》

    作为使用AndroidSDK构建这些应用程序的实用指南书籍,《Android高级编程》从始至终穿插了一系列示例项目,每个项目都引入Android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍Android的所有基本功能,并...

    python核心编程(第3版)

    第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI编程、数据库编程、Microsoft Office编程、扩展Python等内容。第2部分讲解了与Web开发相关的主题,包括Web...

    Python 核心编程 第二版.mobi

    本书是经典的Python [1] ...第2部分则提供了各种高级主题来展示可以使用Python做些什么,包括正则表达式、网络编程、网络客户端编程、多线程编程、图形用户界面编程、Web编程、数据库编程、扩展Python 和一些其他材料。

    Python 核心编程 第二版.azw3

    本书是经典的Python [1] ...第2部分则提供了各种高级主题来展示可以使用Python做些什么,包括正则表达式、网络编程、网络客户端编程、多线程编程、图形用户界面编程、Web编程、数据库编程、扩展Python 和一些其他材料。

    核心编程第三版高清中文版

    Python核心编程第三版,第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI编程、数据库编程、Microsoft Office编程、扩展Python等内容。第2部分讲解了与Web开发...

    Python 核心编程 第二版.pdf

    本书是经典的Python指导...第2部分则提供了各种高级主题来展示可以使用Python做些什么,包括正则表达式、网络编程、网络客户端编程、多线程编程、图形用户界面编程、Web编程、数据库编程、扩展Python 和一些其他材料。

    Qt高级编程.rar

    完整带书签 高清PDF 带源码 作者: (英)Mark Summerfield ,《qt高级编程》以工程实践为主旨,是对qt现有的700多个类和上百万字参考文档中部分关键技术深入、全面的讲解和探讨,如丰富的网络/桌面应用程序、多线程、...

    QT高级编程

    《Qt高级编程》以工程实践为主旨,是对Qt现有的700多个类和上百万字参考文档中部分关键技术深入、全面的讲解和探讨,如丰富的网络/桌面应用程序、多线程、富文本处理、图形/视图架构、模型/视图架构等;另外,除对每...

    Python核心编程第二版

    第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI编程、数据库编程、Microsoft Office编程、扩展Python等内容。第2部分讲解了与Web开发相关的主题,包括Web...

    Python编程笔记 Python开发知识总结整理 Python核心笔记 共51页.pdf

    【目录】 前言 【关于Python】 【关于《Python核心编程》(第二版)】 ...第十八章 多线程编程 第十九章 图形用户界面编程 第二十章 Web编程 第二十一章 数据库编程 第二十二章 扩展Python 第二十三章 其他话题

    Python核心编程第二版(英文)

    第2部分则提供了各种高级主题来展示可以使用Python做些什么,包括正则表达式、网络编程、网络客户端编程、多线程编程、图形用户界面编程、 Web编程、数据库编程、扩展Python 和一些其他材料。 全书分为两个部分:第...

    UNIX网络编程+第1卷+第2卷(中文第二版)+带书签

    UNIX域协议、非阻塞I/O、路由套接口、广播、多播、线程、原始套接口、数据链路访向等,对于客户一服务程序的各种设计方法也作了完整的探讨。在叙述X/Open传输接口API时,还对记这种设备驱动机制作了深入分析。在...

    java高级复习笔记.zip

    以下是对这个资源的详细描述: 全面的高级主题覆盖:这份文档涵盖了Java编程的高级主题,包括但不限于多线程编程、数据结构与算法、设计模式、I/O 操作、异常处理、性能优化等。每个主题都经过详尽的讲解,使学习者...

    Python核心编程代码

    第2部分则提供了各种高级主题来展示可以使用Python做些什么,包括正则表达式、网络编程、网络客户端编程、多线程编程、图形用户界面编程、Web编程、数据库编程、扩展Python 和一些其他材料。本书适合Python初学者,...

Global site tag (gtag.js) - Google Analytics