Future模式简述

* 传统单线程环境下,调用函数是同步的,必须等待程序返回结果后,才可进行其他处理。
Futrue模式下,调用方式改为异步。
* Futrue模式的核心在于:充分利用主函数中的等待时间,利用等待时间处理其他任务,充分利用计算机资源。
主要角色

* Main:系统启动,调用Client发出请求
* Client:返回Data对象,立即返回FutureData,并开启ClientThread线程装配RealData
* Data:返回数据的接口
* FutureData:Futrue数据,是一个虚拟的数据,需要装配RealData
* RealData:真实数据,构造比较慢。
JDK内置实现
——-jdk中已经内置future模式的实现。其中最重要的事模块是FutrueTask类,它实现了Runnable接口,作为单独的线程运行,在其run()
方法中,通过Sync内部类,调用Callable接口,并维护Callable接口的返回对象。使用FutureTask.get()方法,返回Callable接口的返回对象。
具体使用如下:

RealData.java
package com.y.www; import java.util.concurrent.Callable; /** * @description: *
@author: lbYue * @date: Created in 14:11 2018/1/9 */ public class RealData
implements Callable<String> { private String para; public RealData(String
para){ this.para = para; } @Overridepublic String call() throws Exception {
//真实的业务逻辑 StringBuffer sb = new StringBuffer(); for (int i= 0 ;i < 10 ; i++){
sb.append(para);try { Thread.sleep(100); }catch (InterruptedException e){ } }
return sb.toString(); } }
MainTest.java
package com.y.www; import java.util.concurrent.*; /** * @description: * @author
: lbYue * @date: Created in 14:15 2018/1/9 */ public class MainTest { public
static void main(String[] args) throws InterruptedException,ExecutionException{
FutureTask<String> future =new FutureTask<String>(new RealData("a"));
ExecutorService executor = Executors.newFixedThreadPool(1);
executor.submit(future); System.out.println("请求完毕!"); try { System.out.println(
"我在睡觉别打扰我!2秒后回应"); Thread.sleep(2000); }catch (InterruptedException e){ }
System.out.println("数据处理完成:"+future.get()); } }
控制台输出结果

技术
©2019-2020 Toolsou All rights reserved,
份额已超宁德时代!LG化学确认将分拆电池业务部门Qt学习7——模态和非模态对话框数字滚动抽奖小程序vue 监听 Treeselect 选择项的改变 dedecms网站被黑 劫持到其他网站如何解决内存溢出和内存泄漏的区别、产生原因以及解决方案SQL Server 数据库词汇表1190 反转每对括号间的子串 leetcode蝗灾虫群上亿只很少发生碰撞 蝗虫要成自动驾驶功臣最优化方法总结:公式解、数值优化、求解思想