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();
    }
    }

    }

  • 相关阅读:
    python网络爬虫(1)静态网页抓取
    博弈论的一些例子
    虚机Linux最小系统下安装图形界面,与yum配置
    主成分分析法详解(PCA)
    吴恩达机器学习私人总结(3)神经网络
    HttpServletRequest & HttpServletResponse
    编译原理复习
    Http协议 & Servlet
    分享一下HttpWatch 10 pro 带lic激活文件
    基于Storm的WordCount
  • 原文地址:https://www.cnblogs.com/wueryuan/p/12073064.html
Copyright © 2011-2022 走看看