- 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 方法 描述 boolean
cancel(boolean mayInterruptIfRunning)
尝试取消执行此任务。protected void
done()
此任务转换到状态isDone
(无论是正常还是通过取消)调用的受保护方法。V
get()
等待计算完成,然后检索其结果。V
get(long timeout, TimeUnit unit)
如果需要等待最多在给定的时间计算完成,然后检索其结果(如果可用)。boolean
isCancelled()
如果此任务在正常完成之前被取消,则返回true
。boolean
isDone()
如果此任务完成,则返回true
。void
run()
将此未来设置为其计算结果,除非已被取消。protected boolean
runAndReset()
执行计算而不设置其结果,然后将此将来重置为初始状态,如果计算遇到异常或被取消,则不执行此操作。protected void
set(V v)
将此未来的结果设置为给定值,除非此未来已被设置或已被取消。protected void
setException(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
如果成功运行并重置
-
-