java.lang.Object
java.util.concurrent.FutureTask<V>
- 类型参数:
-
V
- 由此FutureTask的get
方法返回的结果类型
- 所有实现的接口:
-
Runnable
,Future<V>
,RunnableFuture<V>
可取消的异步计算。此类提供了
Future
的基本实现,具有启动和取消计算的方法,查询计算是否完成的方法,以及检索计算结果的方法。只有在计算完成时才能检索结果;如果计算尚未完成,则get
方法将阻塞。一旦计算完成,计算就无法重新启动或取消(除非使用runAndReset()
调用计算)。
FutureTask
可以用来包装Callable
或Runnable
对象。因为FutureTask
实现了Runnable
,所以可以将FutureTask
提交给Executor
执行。
除了作为独立类使用外,此类还提供了可能在创建自定义任务类时有用的protected
功能。
- 自 JDK 版本:
- 1.5
-
Nested Class Summary
Nested classes/interfaces declared in interface java.util.concurrent.Future
Future.State
-
Constructor Summary
ConstructorDescriptionFutureTask
(Runnable runnable, V result) 创建一个FutureTask
,在运行时执行给定的Runnable
,并安排get
在成功完成时返回给定的结果。FutureTask
(Callable<V> callable) 创建一个FutureTask
,在运行时执行给定的Callable
。 -
Method Summary
Modifier and TypeMethodDescriptionboolean
cancel
(boolean mayInterruptIfRunning) 尝试取消此任务的执行。protected void
done()
当此任务转换为状态isDone
(无论是正常完成还是通过取消)时调用的受保护方法。get()
必要时等待计算完成,然后检索其结果。必要时等待最多给定时间以使计算完成,然后检索其结果(如果可用)。boolean
如果此任务在正常完成之前被取消,则返回true
。boolean
isDone()
如果此任务已完成,则返回true
。void
run()
将此Future设置为其计算的结果,除非已取消。protected boolean
执行计算而不设置其结果,然后将此future重置为初始状态,如果计算遇到异常或被取消,则无法执行此操作。protected void
将此future的结果设置为给定值,除非此future已经设置或已取消。protected void
使此future报告具有给定throwable作为原因的ExecutionException
,除非此future已经设置或已取消。toString()
返回此FutureTask的字符串表示形式。Methods declared in class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods declared in interface java.util.concurrent.Future
exceptionNow, resultNow, state
-
Constructor Details
-
FutureTask
创建一个FutureTask
,在运行时执行给定的Callable
。- 参数:
-
callable
- 可调用任务 - 抛出:
-
NullPointerException
- 如果可调用为null
-
FutureTask
创建一个FutureTask
,在运行时执行给定的Runnable
,并安排get
在成功完成时返回给定的结果。- 参数:
-
runnable
- 可运行任务 -
result
- 成功完成时要返回的结果。如果不需要特定结果,请考虑使用以下形式的构造:Future<?> f = new FutureTask<Void>(runnable, null)
- 抛出:
-
NullPointerException
- 如果可运行为null
-
-
Method Details
-
isCancelled
public boolean isCancelled()从接口复制的描述:Future
如果此任务在正常完成之前被取消,则返回true
。- 指定者:
-
isCancelled
在接口Future<V>
中 - 返回:
-
如果此任务在完成之前被取消,则返回
true
-
isDone
public boolean isDone()从接口复制的描述:Future
如果此任务已完成,则返回true
。完成可能是由于正常终止、异常或取消 - 在所有这些情况下,此方法将返回true
。 -
cancel
public boolean cancel(boolean mayInterruptIfRunning) 从接口复制的描述:Future
尝试取消此任务的执行。如果任务已经完成或取消,或者由于其他原因无法取消,则此方法不起作用。否则,如果在调用cancel
时任务尚未启动,则此任务不应运行。如果任务已经启动,则mayInterruptIfRunning
参数确定是否应中断执行此任务的线程(如果实现已知)以尝试停止任务。此方法的返回值并不一定表示任务现在已取消;请使用
Future.isCancelled()
。 -
get
从接口复制的描述:Future
必要时等待计算完成,然后检索其结果。- 指定者:
-
get
在接口Future<V>
中 - 返回:
- 计算的结果
- 抛出:
-
CancellationException
- 如果计算被取消 -
InterruptedException
- 如果当前线程在等待时被中断 -
ExecutionException
- 如果计算抛出异常
-
get
public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException 从接口复制的描述:Future
必要时等待最多给定时间以使计算完成,然后检索其结果(如果可用)。- 指定者:
-
get
在接口Future<V>
中 - 参数:
-
timeout
- 等待的最长时间 -
unit
- 超时参数的时间单位 - 返回:
- 计算的结果
- 抛出:
-
CancellationException
- 如果计算被取消 -
InterruptedException
- 如果当前线程在等待时被中断 -
ExecutionException
- 如果计算抛出异常 -
TimeoutException
- 如果等待超时
-
done
protected void done()当此任务转换为状态isDone
(无论是正常完成还是通过取消)时调用的受保护方法。默认实现不执行任何操作。子类可以重写此方法以调用完成回调或执行簿记。请注意,您可以在此方法的实现内部查询状态,以确定此任务是否已取消。 -
set
将此future的结果设置为给定值,除非此future已经设置或已取消。此方法在计算成功完成时由
run()
方法内部调用。- 参数:
-
v
- 值
-
setException
使此Future报告一个ExecutionException
,其原因是给定的throwable,除非此Future已经被设置或已被取消。除非计算失败,否则此方法会在
run()
方法内部调用。- 参数:
-
t
- 失败的原因
-
run
public void run()从接口复制的描述:RunnableFuture
将此Future设置为其计算结果,除非它已被取消。- 指定者:
-
run
在接口Runnable
- 指定者:
-
run
在接口RunnableFuture<V>
-
runAndReset
protected boolean runAndReset()执行计算而不设置其结果,然后将此Future重置为初始状态,如果计算遇到异常或被取消,则无法执行此操作。这适用于本质上执行多次的任务。- 返回值:
-
true
如果成功运行并重置
-
toString
返回此FutureTask的字符串表示形式。
-