- java.lang.Object
-
- java.util.concurrent.FutureTask<V>
-
- 参数类型
-
V- 该FutureTask的get方法返回的结果类型
- All Implemented Interfaces:
-
Runnable,Future<V>,RunnableFuture<V>
- 已知直接子类:
-
Task
public class FutureTask<V> extends Object implements RunnableFuture<V>
可取消的异步计算。 该类提供了一个Future的基本实现,具有启动和取消计算的方法,查询计算是否完整,并检索计算结果。 结果只能在计算完成后才能检索; 如果计算尚未完成,则get方法将阻塞。 计算完成后,无法重新启动或取消计算(除非使用runAndReset()调用计算)。A
FutureTask可用于包装Callable或Runnable对象。 因为FutureTask实现Runnable,一个FutureTask可以提交给一个Executor执行。除了作为独立类之外,此类还提供了
protected功能,这在创建自定义任务类时可能很有用。- 从以下版本开始:
- 1.5
-
-
构造方法摘要
构造方法 Constructor 描述 FutureTask(Runnable runnable, V result)创建一个FutureTask,将在运行时执行给定的Runnable,并安排get将在成功完成后返回给定的结果。FutureTask(Callable<V> callable)创建一个FutureTask,它将在运行时执行给定的Callable。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 booleancancel(boolean mayInterruptIfRunning)尝试取消执行此任务。protected voiddone()此任务转换到状态isDone(无论是正常还是通过取消)调用的受保护方法。Vget()等待计算完成,然后检索其结果。Vget(long timeout, TimeUnit unit)如果需要等待最多在给定的时间计算完成,然后检索其结果(如果可用)。booleanisCancelled()如果此任务在正常完成之前被取消,则返回true。booleanisDone()如果此任务完成,则返回true。voidrun()将此未来设置为其计算结果,除非已被取消。protected booleanrunAndReset()执行计算而不设置其结果,然后将此将来重置为初始状态,如果计算遇到异常或被取消,则不执行此操作。protected voidset(V v)将此未来的结果设置为给定值,除非此未来已被设置或已被取消。protected voidsetException(Throwable t)导致这个未来报告一个ExecutionException作为其原因,除非这个未来已经被设置或已被取消。
-
-
-
构造方法详细信息
-
FutureTask
public FutureTask(Callable<V> callable)
创建一个FutureTask,它将在运行时执行给定的Callable。- 参数
-
callable- 可调用任务 - 异常
-
NullPointerException- 如果可调用为空
-
FutureTask
public FutureTask(Runnable runnable, V result)
创建一个FutureTask,它将在运行时执行给定的Runnable,并安排get将在成功完成后返回给定的结果。- 参数
-
runnable- 可运行的任务 -
result- 成功完成后返回的结果。 如果您不需要特定的结果,请考虑使用以下形式的结构:Future<?> f = new FutureTask<Void>(runnable, null) - 异常
-
NullPointerException- 如果runnable为null
-
-
方法详细信息
-
isCancelled
public boolean isCancelled()
说明从接口Future复制如果此任务在正常完成之前被取消,则返回true。- Specified by:
-
isCancelled在接口Future<V> - 结果
-
true如果此任务在完成之前被取消
-
isDone
public boolean isDone()
说明从接口Future复制如果此任务完成,则返回true。 完成可能是由于正常终止,异常或取消 - 在所有这些情况下,此方法将返回true。
-
cancel
public boolean cancel(boolean mayInterruptIfRunning)
描述从接口Future复制尝试取消执行此任务。 如果任务已经完成,已经被取消或由于某种其他原因而无法取消,则此尝试将失败。 如果成功,并且当cancel时此任务尚未启动,则此任务不应运行。 如果任务已经开始,则mayInterruptIfRunning参数确定执行此任务的线程是否应该中断以试图停止任务。此方法返回后,对
Future.isDone()的后续调用将始终返回true。 对后续调用Future.isCancelled()总是返回true如果此方法返回true。
-
get
public V get() throws InterruptedException, ExecutionException
说明从接口Future复制等待计算完成,然后检索其结果。- Specified by:
-
get在接口Future<V> - 结果
- 计算结果
- 异常
-
CancellationException- 如果计算被取消 -
InterruptedException- 如果当前线程在等待时中断 -
ExecutionException- 如果计算抛出异常
-
get
public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
说明从接口Future复制如果需要等待最多在给定的时间计算完成,然后检索其结果(如果可用)。- Specified by:
-
get在接口Future<V> - 参数
-
timeout- 等待的最长时间 -
unit- 超时参数的时间单位 - 结果
- 计算结果
- 异常
-
CancellationException- 如果计算被取消 -
InterruptedException- 如果当前线程在等待时中断 -
ExecutionException- 如果计算抛出异常 -
TimeoutException- 如果等待超时
-
done
protected void done()
此任务转换到状态isDone(无论是正常还是通过取消)调用的受保护方法。 默认实现什么都不做。 子类可以覆盖此方法来调用完成回调或执行簿记。 请注意,您可以在执行此方法之前查询状态,以确定此任务是否已被取消。
-
setException
protected void setException(Throwable t)
导致这个未来报告一个ExecutionException与给定的可抛弃的原因,除非这个未来已经被设置或已被取消。该方法在计算失败时由
run()方法内部调用。- 参数
-
t- 失败的原因
-
run
public void run()
描述从接口RunnableFuture复制将此未来设置为其计算结果,除非已被取消。- Specified by:
-
run在接口Runnable - Specified by:
-
run在接口RunnableFuture<V> - 另请参见:
-
Thread.run()
-
runAndReset
protected boolean runAndReset()
执行计算而不设置其结果,然后将此将来重置为初始状态,如果计算遇到异常或被取消,则不执行此操作。 这被设计用于内在地执行多次的任务。- 结果
-
true如果成功运行并重置
-
-