zoukankan      html  css  js  c++  java
  • 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());
        
    }
    }
  • 相关阅读:
    (转)PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
    Java 异步转同步 ListenableFuture in Guava
    makepy
    Eclipse安装Freemarker插件
    Windows下Go语言LiteIDE下载及安装
    Windows 平台下 Go 语言的安装和环境变量设置
    phpcms v9表单向导添加验证码
    mac下谷歌chrome浏览器的快捷键
    vscode的go插件安装
    golang查看文档
  • 原文地址:https://www.cnblogs.com/orchid9/p/7635697.html
Copyright © 2011-2022 走看看