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,
【jvm学习】执行引擎python(基本介绍)用户管理和文件权限C++第五章多态性习题:(快大结局了)VHDL——含异步清零和同步使能的加法计数器源程序Windows网络服务渗透测试实战-跨网段攻击JavaScript百炼成仙 1.15 天秀找出游戏的获胜者(java)单片机能做什么,你有什么有单片机或开源硬件做的有意思的作品吗一份笔记让你从 15K 涨薪并跳槽到32K+16