• 使用Future


    /**
    * Runnable接口有个问题,它的方法没有返回值。如果任务需要一个返回结果,那么只能保存到变量,还要提供额外的方法读取,非常不便。
    * Java标准库还提供了一个Callable接口,和Runnable接口比,它多了一个返回值
    * Callable接口是一个泛型接口,可以返回指定类型的结果
    * 当我们提交一个Callable任务后,我们会同时获得一个Future对象,然后,我们在主线程某个时刻调用Future对象的get()方法,就可以获得异步执行的结果。
    * 在调用get()时,如果异步任务已经完成,我们就直接获得结果。如果异步任务还没有完成,那么get()会阻塞,直到任务完成后才返回结果。
    * ***************************************************
    * 一个Future<V>接口表示一个未来可能会返回的结果,它定义的方法有:
    * get():获取结果(可能会等待)
    * get(long timeout, TimeUnit unit):获取结果,但只等待指定的时间;
    * cancel(boolean mayInterruptIfRunning):取消当前任务;
    * isDone():判断任务是否已完成。
    */
    class TestFuture{

    public static void main(String[] args) {
    ExecutorService executor = Executors.newFixedThreadPool(4);
    //定义任务
    Callable<String> task = new Callable<String>() {

    @Override
    public String call() throws Exception {
    return "callable接口";
    }
    };
    // 提交任务并获得Future:
    Future<String> future = executor.submit(task);

    try {
    // 从Future获取异步执行返回的结果:
    String result = future.get();//可能阻塞
    System.out.println(result);
    } catch (InterruptedException e) {
    e.printStackTrace();
    } catch (ExecutionException e) {
    e.printStackTrace();
    }
    }

    }

  • 相关阅读:
    JQuery
    a:hover伪类在ios移动端浏览器内无效的解决方法
    git rebase 过程中遇到冲突该怎么解决?
    git
    vue单文件中scoped样式如何穿透?
    微信小程序-怎么获取当前页面的url
    es6 class 中 constructor 方法 和 super
    如何将svg图标快速转换成字体图标?
    JavaWeb三大组件之一Filter知识总结
    Session的引入以及Cookie的不足
  • 原文地址:https://www.cnblogs.com/wueryuan/p/12073064.html
Copyright © 2020-2023  润新知