Java多线程实现异步调用
来源:互联网 发布:java贪吃蛇源代码详解 编辑:程序博客网 时间:2024/05/16 14:06
原文地址:Java多线程实现异步调用作者:chuansir
在JAVA平台,实现异步调用的角色有如下三个角色:调用者 提货单 真实数据
一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单.然后在过一断时间后凭提货单来获取真正的数据.
去蛋糕店买蛋糕,不需要等蛋糕做出来(假设现做要很长时间),只需要领个提货单就可以了(去干别的事情),等到蛋糕做好了,再拿提货单取蛋糕就可以了。
public class Main {
-
static void main(String[] args) { -
System.out.println( BEGIN" ); -
Host host = Host(); -
Data data1 = host.request( 'A'); -
Data data2 = host.request( 'B'); -
Data data3 = host.request( 'C'); -
-
System.out.println( otherJob );BEGIN" -
{ -
Thread.sleep( -
} (InterruptedException e) { -
} -
System.out.println( otherJob );END" -
-
System.out.println( = " + data1.getContent()); -
System.out.println( = " + data2.getContent()); -
System.out.println( = " + data3.getContent()); -
System.out.println( END" ); -
} - }
下面来看一下,顾客定蛋糕后,蛋糕店做了什么:
- public
class Host { -
Data finalrequest( int count, finalchar c) { -
System.out.println( + ",count + " + ")c + BEGIN" ); -
-
(1) 建立FutureData的实体 -
FutureData newfuture = FutureData(); -
-
(2) 为了建立RealData的实体,启动新的线程 -
Thread() { -
void run() { -
//在匿名内部类中使用count、future、c。 -
RealData realdata = RealData(count, c); -
future.setRealData(realdata); -
} -
}.start(); -
-
System.out.println( + ",count + " + ")c + END" ); -
-
(3) 取回FutureData实体,作为传回值 -
future; -
} - }
下面来看看蛋糕师傅是怎么做蛋糕的:
建立一个字符串,包含count个c字符,为了表现出犯法需要花费一些时间,使用了sleep。
-
final String content; -
RealData( intcount, charc) { -
System.out.println( RealData(" + ",count + " + ")c + BEGIN" ); -
buffer new= char[count]; -
( inti 0;= i < count; i++) { -
buffer[i] = c; -
{ -
Thread.sleep( -
} (InterruptedException e) { -
} -
} -
System.out.println( RealData(" + ",count + " + ")c + END" ); -
= newString(buffer); -
} -
String getContent() { -
content; -
} - }
-
RealData null;realdata = -
boolean ready false;= -
-
synchronized void setRealData(RealData realdata) { -
(ready) { -
防止setRealData被调用两次以上。 -
} -
= realdata; -
= true; -
notifyAll(); -
} -
synchronized String getContent() { -
(!ready) { -
{ -
wait(); -
} (InterruptedException e) { -
} -
} -
realdata.getContent(); -
} - }
System.out.println("data1
-
{ -
wait(); -
} (InterruptedException e) { -
} - //等做好后才能取到
- return
realdata.getContent();
future.setRealData(realdata);
0 0
- Java多线程实现异步调用
- Java多线程实现异步调用
- Java多线程实现异步调用
- Java多线程实现异步调用
- Java多线程实现异步调用
- Java多线程实现异步调用
- Java多线程实现异步调用
- Java异步调用-多线程实现
- Java多线程实现异步调用
- java利用多线程实现异步调用
- Java多线程实现异步调用的方法
- java实现异步调用
- 异步调用实现java
- 异步调用实现java
- PHP中实现异步调用多线程程序代码
- PHP中实现异步调用多线程程序代码
- PHP中实现异步调用多线程程序代码
- Java多线程中的异步调用感悟
- iOS5 ARC,IBOutlets&n…
- mysql 随机产生show命令失败
- iOS开发网络数据之AFNetwork…
- 使用myeclipse的hibernate r…
- android键盘事件
- Java多线程实现异步调用
- jQuery学习积累
- 使用ssh管理远程主机
- java-线程池队列饱和策略
- Arcgis中碎小斑块的处理
- 总结DetachedCriteria级联查…
- 医疗专用数据库Cache对接
- 转载 hessian学习总结
- C++ 基本内置类型