zoukankan      html  css  js  c++  java
  • Future 模式介绍

    假设一个任务执行需要花费一些时间,为了省去不必要的等待时间,可以先获取一个提货单,即future,然后继续处理别的任务,知道货物到达,即任务完成得到结果,此时可以使用提货单提货,即通过future得到返回值。

     

    如下代码所示,加载数据需要10秒中,测试可以先开始任务,随后处理其他的事情,等其他事情都处理完后再取结果。

     

    import java.util.concurrent.Callable;

    public class MyJob implements Callable<Integer> {

        @Override
        public Integer call() throws Exception {
            Thread.sleep(10000);
            return 1;
        }

    }

    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;

    public class TestFuture {
       
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            FutureTask<Integer> future=new FutureTask<Integer>(new MyJob());
           
            new Thread(future).start();
           
            System.out.println("-----ok--------");
           
           Integer i=future.get();
           
            System.out.println(i);
        }

    }

     

    FutureTask实现了Future和Runable接口,FutureTask 开始后,future 执行的时间较长,引起可以处理其他的事情,等其他事情处理好后,在通过future.get()获取结果,如果

     

    call方法还未完成,则此时线程会阻塞等待。

  • 相关阅读:
    《实战Java高并发程序设计》读书笔记一
    《实战Java高并发程序设计》读书笔记二
    SprintBoot学习(三)
    SprintBoot学习(二)
    SprintBoot学习(一)
    jQuery学习(三)
    jQuery学习(二)
    jQuery学习(一)
    利用activeX控件在网页里自动登录WIN2003远程桌面并实时控制
    上传读取Excel文件数据
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/4217450.html
Copyright © 2011-2022 走看看