简介
Future主要用于有返回值的异步任务。最核心的类是FutureTask,它是Future接口唯一的实现类。
FutureTask
可以看出FutureTask类实现了Runnable和Future接口。
内部属性有
private volatile int state;
private Callable<V> callable;
/** The result to return or exception to throw from get() */
private Object outcome; // non-volatile, protected by state reads/writes
/** The thread running the callable; CASed during run() */
private volatile Thread runner;
/** Treiber stack of waiting threads */
private volatile WaitNode waiters;
其中
- state表示任务执行状态,有下面几个取值
private static final int NEW = 0;
private static final int COMPLETING = 1;
private static final int NORMAL = 2;
private static final int EXCEPTIONAL = 3;
private static final int CANCELLED = 4;
private static final int INTERRUPTING = 5;
private static final int INTERRUPTED = 6; - callable是实际要执行的run方法的对象
- outCome是执行的结果
- runner是执行run方法的线程
- waitNodes是一个链表,存储调用get或者别的方法而阻塞的线程
构造函数
有两周构造函数,分别传入Runnable对象和Callable对象
public FutureTask(Callable<V> callable) {
if (callable == null)
throw new NullPointerException();
this.callable = callable;
this.state = NEW;