【Future模式】

Future模式类似商品订单。比如在网购时,当看中一件商品时,就可以提交订单,当订单处理完成后,在家里等待商品送货上门即可。或者类似我们发送Ajax请求的时候,页面是异步的进行后台处理,用户无需一直等待请求的结果,可以继续浏览或操作其他内容。

【Future模式自行代码实现例子】

//返回数据的接口public interface Data {String getResult();
}//实现Data接口,返回真实数据,构造比较慢public class RealData implements Data{private String result;public RealData(String queryStr) {System.out.println("查询"+queryStr+",这个查询非常耗时!!!");try{Thread.sleep(5000);}catch (Exception e){}System.out.println("查询完毕,获取结果");this.result = "结果是:哈哈哈哈哈哈哈哈";}@Overridepublic String getResult() {return result;}
}//实现Data接口,构造很快,返回一个伪数据,需要装配RealDatapublic 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();}@Overridepublic synchronized String getResult() {//如果没有装载好,则一直处于阻塞状态while (!isReady){try{wait();}catch (InterruptedException e){e.printStackTrace();}}//装载好,直接获取数据即可return this.realData.getResult();}
}//立即返回FutureData数据,并开启一个线程去装配RealData数据public class FutureClient {public Data request(final String queryStr){//1.想要一个代理对象(Data接口的实现类)先返回发送请求的客户端,告诉他请求已经接收到,可以做其他的事情final FutureData futureData = new FutureData();//2.启动一个线程,去加载真实的数据,传递给这个代理对象new Thread(()-> {  //基于java8//3.这个线程可以慢慢去加载真实对象,然后传递给代理对象RealData realData = new RealData(queryStr);futureData.setRealData(realData);  //等加载好了,再把数据set到futureData中
            }).start();return futureData;}
}
public class Main {public static void main(String[] args) {FutureClient fc = new FutureClient();Data data = fc.request("id=666");System.out.println("请求发送成功");System.out.println("Main线程开始做别的事情");String result = data.getResult();System.out.println("result=="+result);}
}

【运行结果】

转载于:https://www.cnblogs.com/HigginCui/p/9398882.html

28_Future模式1相关推荐

  1. 大淘宝服务端技术干货沉淀和总结

    网络基础 TCP三次握手 三次握手过程 客户端--发送带有SYN标志的数据包--服务端 一次握手 Client进入syn_sent状态 服务端--发送带有SYN/ACK标志的数据包--客户端 二次握手 ...

  2. python 各种模块学习

    from:https://blog.csdn.net/weiwangchao_/article/details/70570508 转载:.... Python的模块大全,很全,有详细介绍! 另外附Py ...

  3. 【Docker】容器的几种网络模式

    当你使用Docker时,你会发现需要了解很多关于网络的知识.Docker作为目前最火的轻量级容器引擎,因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求.本文介绍了Docker的4种 ...

  4. kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...

  5. 2022-2028年中国交通建设PPP模式深度分析及发展战略研究报告(全卷)

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了PPP模式行业相关概述.中国PPP模式行业运行环境.分析了中国PPP ...

  6. Redis 笔记(10)— 发布订阅模式(发布订阅单个信道、订阅信道后的返回值分类、发布订阅多个信道)

    1. 发布-订阅概念 发布-订阅 模式包含两种角色,分别为发布者和订阅者. 订阅者可以订阅一个或者若干个频道(channel): 而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都可以收到此消 ...

  7. 2022-2028年中国新型氟塑料行业市场发展模式及投资机会预测报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了新型氟塑料行业相关概述.中国新型氟塑料行业运行环境.分析了中国新型氟 ...

  8. RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)

    1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...

  9. 2022-2028年中国聚合物气体分离膜行业市场发展模式及投资前景分析报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了聚合物气体分离膜行业相关概述.中国聚合物气体分离膜行业运行环境.分析 ...

  10. 2022-2028年中国塑料板的制造行业市场发展模式及竞争格局预测报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了塑料板的制造行业相关概述.中国塑料板的制造行业运行环境.分析了中国塑 ...

最新文章

  1. php 二维数组排序详解: array_multisort
  2. java实现星级评分功能_JavaScript实现星级评分
  3. Cypress 基础 - 元素的定位
  4. C++学习之路 | PTA乙级—— 1055 集体照 (25 分)(精简)
  5. Flink window 用法介绍
  6. 计算机python语言_计算机语言Python解释器
  7. 【英语学习】【English L06】U02 Food L5 A vegetarian or meat lover
  8. 【Kafka】Kafka 配置 SCRAM认证
  9. AltTab 把 Windows 的 Alt+Tab 功能带到 macOS
  10. java消息头_java中怎么进行头消息校验
  11. oracle分析函数详解
  12. 【以前的空间】网络流合集
  13. html静态页面作业家乡网站设计—我的家乡-四川(9页) HTML+CSS+JavaScript 学生DW网页设计作业成品
  14. 我的理想是学计算机,我的理想作文(精选10篇)
  15. C盘清理--模拟器(夜神为例)占用空间越来越大问题解决方案(本方法适用于安装过多个APK,虽然卸载了但是占用仍然很严重的情况)
  16. 5.21 将表格恢复到排序前的状态 [原创Excel教程]
  17. 全体起立!广州大学数据库综合设计实验
  18. devexpress html编辑器,图解DevExpress RichEditControl富文本的使用,附源码及官方API
  19. 一、MicroApp快速入门示例
  20. 何为数据库连接池?其工作原理是什么?

热门文章

  1. 阿里云携手印度电信巨头 网络互连覆盖150个国家地区
  2. AngularJs学习的前景及优势
  3. contentType,charset和pageEncoding的区别
  4. 网站性能测试工具Apache Benchmark的使用说明
  5. 存储空间的动态分配与释放
  6. vue开发环境的搭建流程
  7. spark Transformations算子
  8. Python中元组,列表,字典的区别
  9. Linux内核编译与安装[转]
  10. hibernate 批量插入 Batch