(六)深入理解FutureTask、Callable、RunnableFuture的底层源码和关系?

(1)先整体看一下他们之间的血缘关系和层次关系

(六)深入理解FutureTask、Callable、RunnableFuture的底层源码和关系?_第1张图片
FutureTask实现了RunnableFuture接口
(六)深入理解FutureTask、Callable、RunnableFuture的底层源码和关系?_第2张图片
RunnableFuture接口多继承了Runnable和Future的接口类
(六)深入理解FutureTask、Callable、RunnableFuture的底层源码和关系?_第3张图片
Runnable接口中只有一个方法:

   @FunctionalInterface
public interface Runnable {
   //执行
    public abstract void run();
}

Future接口中有以下几个方法:
public interface Future< V >

//用来取消异步任务的执行。如果异步任务已经完成或者已经被取消,或者由于某些原因不能取消,则会返回false。
//如果任务还没有被执行,则会返回true并且异步任务不会被执行。
boolean cancel(boolean mayInterruptIfRunning);
//判断任务是否被取消,如果任务在结束(正常执行结束或者执行异常结束)前被取消则返回true,否则返回false。
boolean isCancelled();
//判断任务是否已经完成,如果完成则返回true,否则返回false。需要注意的是:任务执行过程中发生异常、任务被取消也属于任务已完成,也会返回true。
isDone():
//获取任务执行结果,如果任务还没完成则会阻塞等待直到任务执行完成。如果任务被取消则会抛出CancellationException异常,
//如果任务执行过程发生异常则会抛出ExecutionException异常,如果阻塞等待过程中被中断则会抛出InterruptedException异常。
V  get():
//带超时时间的get()版本,如果阻塞等待过程中超时则会抛出TimeoutException异常。
V get(long timeout,Timeunit unit):

你可能感兴趣的:(【并发专题】)