并行程序设计模式-future模式
来源:互联网 发布:大数据 宣传片 脚本 编辑:程序博客网 时间:2024/06/05 19:32
future模式概念
客户端发送一个长时间的请求,服务端不需等待该数据处理完成便立即返回一个伪造的代理数据(相当于商品订单,不是商品本身),用户也无需等待,先去执行其他的若干操作后,再去调用服务器已经完成组装的真实数据。该模型充分利用了等待的时间片段。
传统的获取数据的方式
使用future模式的数据获取方式
代码结构
类图
代码
package test;public class RealData implements Data { protected String result ; public RealData(String param) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10; i++) { sb.append(param); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } result = sb.toString(); } @Override public String getResult() { return result; }}
package test;public class Client { public Data request(final String queryStr) { final FutureData future = new FutureData(); new Thread(){ public void run(){ RealData realData = new RealData(queryStr); future.setRealData(realData); } }.start(); //一开始直接返回future,将耗时的初始化操作放到线程中执行 return future; }}
package test;public interface Data { public String getResult();}
package test;public class FutureData implements Data { private RealData realData = null; private boolean isReady = false; public synchronized void setRealData(RealData realData) { System.out.println("进入FutureData的setRealData()"); while (isReady) { return; } this.realData = realData; isReady = true; notifyAll(); System.out.println("执行了notifyAll()"); } @Override public synchronized String getResult() { System.out.println("进入FutureData的getResult()"); while (!isReady) { try { System.out.println("执行了wait()"); wait(); System.out.println("唤配了wait()"); } catch (InterruptedException e) { e.printStackTrace(); } } //真实数据构造完成后,再获取真实数据的结果 return realData.result; }}
package test;public class FutureTest { public static void main(String[] args) { Client client = new Client(); Data data = client.request("param"); //一段长时间的业务逻辑,可以处理其他事情 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("real Data:"+data.getResult()); }}
运行FutureTest ,输出:
进入FutureData的getResult()
执行了wait()
进入FutureData的setRealData()
执行了notifyAll()
唤配了wait()
real Data:paramparamparamparamparamparamparamparamparamparam
阅读全文
0 0
- 并行程序设计模式-future模式
- 并行JAVA程序设计模式Future模式
- Java 并行程序设计模式 (Future 模式)
- 并行-Future模式
- 《Java高并发程序设计》学习 --5.5 并行模式之 Future模式
- 并行程序设计模式
- 并行程序设计模式
- java并行程序设计模式
- 并发程序设计之Future模式
- 并发程序设计模式之Future模式
- 并行程序开发之Future模式
- Java并行程序设计模式小结
- 并行程序设计模式--Master-Worker模式
- 并行程序设计模式-master-worker模式
- Future 模式
- Future 模式
- Future模式
- Future模式
- 过滤数组假值
- 分享一个php短信验证码接口实例
- MATLAB图像处理-霍夫变换检测图像中的线段
- [HAL库学习之路]6.WWDG-窗口看门狗
- C语言 获取系统时间方法(strftime())
- 并行程序设计模式-future模式
- 行为经济学:面对风险,人类的想法其实很复杂
- BigDecimal 数据计算与精度舍入
- 启动页白屏换成图片后上滑
- kafka源码阅读环境搭建
- 逆波兰表达式的求解问题
- 前言
- 混合开发----论集成效率的提升空间
- vue复制功能