• 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方法还未完成,则此时线程会阻塞等待。

  • 相关阅读:
    IOS 11 通讯录手机号「隐形字符」的 Bug
    本地添加const参数 防止短信接口恶意调用
    javascript阿拉伯数字 转 汉字中文数字
    js去掉数组的空字符串
    Chrome 清除某个特定网站下的缓存
    vue-cli中的babel配置文件.babelrc详解
    提交到github报错Please tell me who you are
    跨域问题
    js单线程、js任务队列、异步操作
    Java 异常
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/4217450.html
Copyright © 2020-2023  润新知