FutureTask
FutureTask
(一)Future接口
public interface Future<V> { /**
* 取消任务的执行,如果该任务由于已经完成,或是已经被取消,或者是其他原因导致无法被取消,则失败。
* 若取消成功,如果该任务还未执行,则永远不会执行,如果该任务已经开始执行,则根据参数mayInterruptIfRunning决
* 定是否中断线程。
*/
boolean cancel(boolean mayInterruptIfRunning);
/**
* 如果执行完成前被取消,则返回true
*/
boolean isCancelled();
/**
* 已执行完成,或是发生异常,或是被取消,都会返回true
*/
boolean isDone();
/**
* 返回执行结果,可能会被阻塞
*/
V get() throws InterruptedException, ExecutionException;
/**
* 返回执行结果,可能会被阻塞,参数timeout指定阻塞的最大时间
*/
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}
(二)FutureTask的基本属性和执行状态
callable是被执行的任务,执行完后会被置空;
outcome保存了正常执行完成的结果,或是执行过程中抛出的异常;
runner是执行任务的线程;
waiters是阻塞队列,当任务在执行过程中时,企图获取执行结果的线程,会被阻塞。
FutureTask一共有7个状态:
NEW表示初始状态,此时任务尚未被执行;
COMPLETING表示执行状态,任务正在被执行;
NORMAL表示任务正常执行完成;
EXCEPTIONAL表示任务执行发生异常;
CANCELLED表示任务被取消,但线程未被中断;
INTERRUPTING表示任务被取消,且线程被中断,此时正在中断过程中;
INTERRUPTED表示任务被取消,且线程被中断,此时线程已经被中断。
public class FutureTask<V> implements RunnableFuture<V> { private volatile int 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;
/**
* 被执行的任务
*/
private Callable<V> callable;
/**
* 返回的执行结果,或抛出的异常
*/
private Object outcome; // non-volatile, protected by state reads/writes
/**
* 运行任务的线程
*/
private volatile Thread runner;
/**
* 阻塞等待队列
*/
private volatile WaitNode waiters;
}
以上是 FutureTask 的全部内容, 来源链接: utcz.com/z/510655.html