zoukankan      html  css  js  c++  java
  • JUC线程池之 Callable和Future

    Callable 和 Future 简介   Callable 和 Future 是比较有趣的一对组合。当我们需要获取线程的执行结果时,就需要用到它们。Callable用于产生结果,Future用于获取结果。

    1. Callable Callable 是一个接口,它只包含一个call()方法。Callable是一个返回结果并且可能抛出异常的任务。 为了便于理解,我们可以将Callable比作一个Runnable接口,而Callable的call()方法则类似于Runnable的run()方法。 Callable的源码如下:
    public interface Callable<V> {
        V call() throws Exception;
    }
    

    说明:从中我们可以看出Callable支持泛型。

    1. Future Future 是一个接口。它用于表示异步计算的结果。提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。 Future的源码如下:
    public interface Future<V> {
        // 试图取消对此任务的执行。
        boolean     cancel(boolean mayInterruptIfRunning)
    
        // 如果在任务正常完成前将其取消,则返回 true。
        boolean     isCancelled()
    
        // 如果任务已完成,则返回 true。
        boolean     isDone()
    
        // 如有必要,等待计算完成,然后获取其结果。
        V           get() throws InterruptedException, ExecutionException;
    
        // 如有必要,最多等待为使计算完成所给定的时间之后,获取其结果(如果结果可用)。
        V             get(long timeout, TimeUnit unit)
              throws InterruptedException, ExecutionException, TimeoutException;
    }
    

    说明: Future用于表示异步计算的结果。它的实现类是FutureTask,在讲解FutureTask之前,我们先看看Callable, Future, FutureTask它们之间的关系图,如下: 说明: 01 RunnableFuture是一个接口,它继承了Runnable和Future这两个接口。RunnableFuture的源码如下:

    public interface RunnableFuture<V> extends Runnable, Future<V> {
        void run();
    }
    

    02 FutureTask实现了RunnableFuture接口。所以,我们也说它实现了Future接口。

  • 相关阅读:
    一维数组的相关问题
    逗号表达式
    三目表达式
    前自增和后自增的比较
    关于Spring中的PagedListHolder分页类的分析
    fmt:formatDate标签的输出格式
    用java流方式判断文件类型
    常用文件的文件头(附JAVA测试类)
    jsp页面判断文件上传类型
    spring MVC上传文件演示
  • 原文地址:https://www.cnblogs.com/cag2050/p/7295379.html
Copyright © 2011-2022 走看看