Future模式个人理解

Future模式
  (1)定义理解:当我们在淘宝下订单时,我们怎么知道下单成功,这就是通过代理模式,将订单返回给你,让你知道你下单成功。然后异步处理你订单里的东西,等东西到了之后再通知你,真正的物品到了。这就是Future模式,通过代理模式和开启一个线程来进行异步处理想要的数据,其他线程可以继续使用。
  (2)角色有:
    Main:调用Client 发送请求
    Client:返回Data对象,分为两步,立即返回FutureData代理对象,并开启新线程用于获取真正的数据。
    Data:RealData和FutureData的抽象接口
    FutureData:RealData的代理对象,构造很快,是一个假数据。
    RealDate:真实数据,但是构造很慢。
  (3)JDK中有内置的Future模式
    实例使用代码如下:

    

public class RealData implements Callable<String>{

    //定义一个变量用于保存数据
    public String temp;
    
    public RealData3(String string){
        this.temp=string;
    }
    
    @Override
    public String call() throws Exception {
        //真实业务逻辑,执行速度可能很慢。
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<10;i++){
            sb.append(temp);
            Thread.sleep(1000);
        }
        return sb.toString();
    }
}


public class Main{
public static void main(String[] args) throws InterruptedException, ExecutionException {
    //定义代理对象
    FutureTask<String> futureTask=new FutureTask<String>(new RealData3("a"));
    //在线程池中开启一个线程,用于执行call()方法。
    ExecutorService eService=Executors.newFixedThreadPool(1);
    eService.submit(futureTask);
    
    //代理对象执行完成,另一个线程中的真实对象的获取依然在进行。
    System.out.println("请求完毕");
    
    //此处尝试其他操作
    for(int i=0;i<10;i++){
        Thread.sleep(1000);
        System.out.println(i);
    }
    
    //此处,如果call依然没有完成会继续等待
    
    System.out.println(futureTask.get());
    
}
}

 

posted @ 2017-10-07 20:29  九星  阅读(158)  评论(0编辑  收藏  举报