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()); } }
控制台输出结果
今日推荐