Future Parttern 先给你这张提货单
来源:互联网 发布:乔任梁与网络暴力 编辑:程序博客网 时间:2024/05/23 01:17
Future是未来,预期的意思,Thread-permessage模式是指将任务交给其他线程来做,但是如果想知道处理的结果,就要使用Future模式,它的典型应用时执行一个需要花一些时间的方法,会立即返回一个future提货单,然后调用方可以继续处理自己的业务逻辑,然后需要的时候再查看future是否返回,一直等到future结果已经处理完毕。
thread-pre-message模式发送的请求很像这样 host.request(10,‘A’),只有请求,没有返回值,而future pattern模式发送请求后会马上就要有返回值,类似这样 Data data=host.request(10,'A'),但是这个data并不是程序执行的结果,只是一个提货单,过一段时间后,可以使用data.getContent()来获取真正的运行结果,调用getContent方法时,如果还没处理完毕,就要等待到处理好为止。
public class FutureThreadTest { /** * @param args */ public static void main(String[] args) { System.out.println("main begin."); Host host = new Host(); Data data1 = host.request(30,'A'); Data data2 = host.request(20,'B'); Data data3 = host.request(10,'C'); System.out.println("main other job begin"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("main other job end"); System.out.println("data1 = " + data1.getContent()); System.out.println("data2 = " + data2.getContent()); System.out.println("data3 = " + data3.getContent()); }}class Host { public Data request(final int count, final char c) { System.out.println("request(" + count + "," + c + ")begin"); final FutureData future = new FutureData(); new Thread() { @Override public void run() { RealData realdata = new RealData(count, c); future.setRealData(realdata); } }.start(); System.out.println("request(" + count + ", " + c + ")end"); return future; }}interface Data{ public abstract String getContent();}class FutureData implements Data{ private RealData realdata = null; private boolean ready = false; public synchronized void setRealData(RealData realdata){ if(ready){ return; } this.realdata=realdata; this.ready=true; notify(); } @Override public synchronized String getContent() { while(!ready){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } return realdata.getContent(); }}class RealData implements Data { private final String content; public RealData(int count, char c) { System.out.println("making realdata(" + count + "," + c + ")begin"); char[] buffer = new char[count]; for (int i = 0; i < count; i++) { buffer[i] = c; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("making realdata(" + count + "," + c + ")end"); this.content = new String(buffer); } @Override public String getContent() { return content; }}
0 0
- Future Parttern 先给你这张提货单
- 人的跟他讲你是否会马自达给你发张给你发张给你放歌
- URL Parttern
- 暂停寻找联合创始人,先让“临时工”给你帮忙
- 暂停寻找联合创始人,先让“临时工”给你帮忙
- 新型智慧城市就选华为,给你一个理由先
- 《给你》
- Object Oriented Design Parttern
- visitor parttern (third day)
- Future
- future
- future
- Future
- Future
- [future]
- Future
- Future
- future
- werg ethsw45 u
- 获取当月每个月的月份
- 达龙微信公众号正式改版啦!!!
- linux下oracle 11g RAC 安装grid失败,如何清除已安装文件
- tomcat目录文件详解
- Future Parttern 先给你这张提货单
- ArcGIS教程:利用ArcGIS创建文本符号
- C#开发高性能Log Help 类设计开发
- hdu 4540
- jpgraph实现支持中文方法(报表)
- mysql删除字段语句
- JavaScript中的匿名函数、回调函数、自调用函数
- 2F01-view-progress-bar-incremental
- 网页前台iframe父子关系及属性互调