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
ConstructorsConstructorDescriptionFutureTask(Runnable runnable, V result) 创建一个FutureTask,在运行时执行给定的Runnable,并安排get在成功完成时返回给定的结果。FutureTask(Callable<V> callable) 创建一个FutureTask,在运行时执行给定的Callable。 -
Method Summary
Modifier and TypeMethodDescriptionbooleancancel(boolean mayInterruptIfRunning) 尝试取消此任务的执行。protected voiddone()当此任务转换为状态isDone(无论是正常完成还是通过取消)时调用的受保护方法。get()必要时等待计算完成,然后检索其结果。必要时等待最多给定时间以使计算完成,然后检索其结果(如果可用)。boolean如果此任务在正常完成之前被取消,则返回true。booleanisDone()如果此任务已完成,则返回true。voidrun()将此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, waitMethods 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的字符串表示形式。
-