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

回到顶部