28_Future模式1
【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相关推荐
- 大淘宝服务端技术干货沉淀和总结
网络基础 TCP三次握手 三次握手过程 客户端--发送带有SYN标志的数据包--服务端 一次握手 Client进入syn_sent状态 服务端--发送带有SYN/ACK标志的数据包--客户端 二次握手 ...
- python 各种模块学习
from:https://blog.csdn.net/weiwangchao_/article/details/70570508 转载:.... Python的模块大全,很全,有详细介绍! 另外附Py ...
- 【Docker】容器的几种网络模式
当你使用Docker时,你会发现需要了解很多关于网络的知识.Docker作为目前最火的轻量级容器引擎,因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求.本文介绍了Docker的4种 ...
- kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势
陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...
- 2022-2028年中国交通建设PPP模式深度分析及发展战略研究报告(全卷)
[报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了PPP模式行业相关概述.中国PPP模式行业运行环境.分析了中国PPP ...
- Redis 笔记(10)— 发布订阅模式(发布订阅单个信道、订阅信道后的返回值分类、发布订阅多个信道)
1. 发布-订阅概念 发布-订阅 模式包含两种角色,分别为发布者和订阅者. 订阅者可以订阅一个或者若干个频道(channel): 而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都可以收到此消 ...
- 2022-2028年中国新型氟塑料行业市场发展模式及投资机会预测报告
[报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了新型氟塑料行业相关概述.中国新型氟塑料行业运行环境.分析了中国新型氟 ...
- RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)
1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...
- 2022-2028年中国聚合物气体分离膜行业市场发展模式及投资前景分析报告
[报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了聚合物气体分离膜行业相关概述.中国聚合物气体分离膜行业运行环境.分析 ...
- 2022-2028年中国塑料板的制造行业市场发展模式及竞争格局预测报告
[报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了塑料板的制造行业相关概述.中国塑料板的制造行业运行环境.分析了中国塑 ...
最新文章
- php 二维数组排序详解: array_multisort
- java实现星级评分功能_JavaScript实现星级评分
- Cypress 基础 - 元素的定位
- C++学习之路 | PTA乙级—— 1055 集体照 (25 分)(精简)
- Flink window 用法介绍
- 计算机python语言_计算机语言Python解释器
- 【英语学习】【English L06】U02 Food L5 A vegetarian or meat lover
- 【Kafka】Kafka 配置 SCRAM认证
- AltTab 把 Windows 的 Alt+Tab 功能带到 macOS
- java消息头_java中怎么进行头消息校验
- oracle分析函数详解
- 【以前的空间】网络流合集
- html静态页面作业家乡网站设计—我的家乡-四川(9页) HTML+CSS+JavaScript 学生DW网页设计作业成品
- 我的理想是学计算机,我的理想作文(精选10篇)
- C盘清理--模拟器(夜神为例)占用空间越来越大问题解决方案(本方法适用于安装过多个APK,虽然卸载了但是占用仍然很严重的情况)
- 5.21 将表格恢复到排序前的状态 [原创Excel教程]
- 全体起立!广州大学数据库综合设计实验
- devexpress html编辑器,图解DevExpress RichEditControl富文本的使用,附源码及官方API
- 一、MicroApp快速入门示例
- 何为数据库连接池?其工作原理是什么?