并发编程(11)-Future模式
来源:互联网 发布:福建广播网络电视台 编辑:程序博客网 时间:2024/06/05 13:25
Future模式有点类似于商品订单。比如在网购时,当看中某一个商品时,就可以提交订单,当订单处理完成后,在家里等待商品送货上门即可。或者说更形象的我们发送Ajax请求的时候,页面是异步的进行后台处理,用户无需一直等待请求的结果,可继续浏览或操作其他内容。
package com.thread.mythread.conn015;public class Main { public static void main(String[] args) throws InterruptedException { FutureClient fc = new FutureClient(); Data data = fc.request("请求参数"); System.out.println("请求发送成功!"); System.out.println("做其他的事情..."); String result = data.getRequest(); System.out.println(result); }}
打印结果:
请求发送成功!
做其他的事情…
根据请求参数进行查询,这是一个很耗时的操作..
操作完毕,获取结果
查询结果
1.客户端发送请求
客户端发送请求,包装类返回“假”的结果,同时创建一个线程去执行真实的操作。
package com.thread.mythread.conn015;public class FutureClient { public Data request(final String queryStr){ //1 我想要一个代理对象(Data接口的实现类)先返回给发送请求的客户端,告诉他请求已经接收到,可以做其他的事情 final FutureData futureData = new FutureData(); //2 启动一个新的线程,去加载真实的数据,传递给这个代理对象 new Thread(new Runnable() { public void run() { //3 这个新的线程可以去慢慢的加载真实对象,然后传递给代理对象 RealData realData = new RealData(queryStr); futureData.setRealData(realData); } }).start(); return futureData; }}
2.包装类操作
package com.thread.mythread.conn015;public interface Data { String getRequest();}
package com.thread.mythread.conn015;public class FutureData implements Data{ private RealData realData ; private boolean isReady = false; public synchronized void setRealData(RealData realData) { //如果已经装载完毕了,就直接返回 if(isReady){ return; } //如果没装载,进行装载真实对象 this.realData = realData; isReady = true; //进行通知 notify(); } public synchronized String getRequest() { //如果没装载好 程序就一直处于阻塞状态 while(!isReady){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //装载好直接获取数据即可 return this.realData.getRequest(); }}
3.真实结果
package com.thread.mythread.conn015;public class RealData implements Data{ private String result ; public RealData (String queryStr){ System.out.println("根据" + queryStr + "进行查询,这是一个很耗时的操作.."); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("操作完毕,获取结果"); result = "查询结果"; } public String getRequest() { return result; }}
阅读全文
0 0
- 并发编程(11)-Future模式
- 并发编程复习(九):Future模式
- 并发编程实现模型之(一)Future模式
- 并发程序设计之Future模式
- java并发包:future模式
- Java并发编程:Callable、Future
- 并发编程:Callable、Future、FutureTask
- 并发编程Future and Callable
- Future模式,并发程序的设计模式
- 并发程序设计模式之Future模式
- 并发模式(一)Future模式
- 多线程编程中Future模式
- Future 模式详解(并发使用)
- Future 模式详解(并发使用)
- java并发包学习系列:future模式
- Future 模式详解(并发使用)
- java并发包学习系列:future模式
- java并发编程(8)--callable&Future
- mysql分库分表在什么时候用?如何用?
- 安卓扫描车牌识别的功能SDK
- 【软考】-防火墙
- Distances to Zero
- 【ZJOJ 5454】【NOIP2017提高A组冲刺11.5】仔细的检查
- 并发编程(11)-Future模式
- java基础之线程(重点)
- 生成波动图
- java se--2.数组-2.一维数组
- 训练日记
- Java字符串的操作
- 网络七层
- 一个获取鼠标位置和键盘按钮的图形化界面一个 工程文件
- 从体测到健康问题的思考转变