zoukankan      html  css  js  c++  java
  • 使用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();
    }
    }

    }

  • 相关阅读:
    《C++标准程序库》 第6章 STL Container
    《C++语言99个常见编程错误》
    单例模式
    《C++标准程序库》 第7章 Iterator Adapters
    Shell颜色封装(C++)
    《改善C++程序的150个建议》
    OpenCV之图片的创建、保存和复制
    XMLDOM对象方法:对象事件
    三国中最精辟的十句话
    中国十大名茶及鉴别方法
  • 原文地址:https://www.cnblogs.com/wueryuan/p/12073064.html
Copyright © 2011-2022 走看看