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

    }

  • 相关阅读:
    mybatis设置select返回HashMap,字段值为null时,不会保存key
    copyProperties 忽略null值字段
    动态新增表单
    页面时时刷新数据
    FormData 传List对象集合到后台
    linux常用命令总结
    Linux部署安装JDK
    yum安装nginx
    01_Python基础
    Nginx防盗链
  • 原文地址:https://www.cnblogs.com/wueryuan/p/12073064.html
Copyright © 2011-2022 走看看