public class FutureTask
extends Object
implements RunnableFuture<V>
java.lang.Object | |
↳ | java.util.concurrent.FutureTask<V> |
可取消的异步计算。 该类提供了Future
的基本实现, Future
包含启动和取消计算的方法,查询计算是否完成以及检索计算结果的方法。 只有在计算完成后才能检索结果; 如果计算尚未完成, get
方法将会阻塞。 计算完成后,计算不能重新启动或取消(除非使用runAndReset()
调用计算)。
A FutureTask
可用于包装Callable
或Runnable
对象。 由于FutureTask
实现Runnable
, FutureTask
可以将FutureTask
提交给Executor
执行。
除了作为独立类使用外,此类还提供了 protected
功能, protected
功能在创建自定义任务类时可能很有用。
Public constructors |
|
---|---|
FutureTask(Callable<V> callable) 创建一个 |
|
FutureTask(Runnable runnable, V result) 创建一个 |
Public methods |
|
---|---|
boolean |
cancel(boolean mayInterruptIfRunning) 试图取消执行此任务。 |
V |
get(long timeout, TimeUnit unit) 如果需要,最多等待计算完成的给定时间,然后检索其结果(如果可用)。 |
V |
get() 如果需要,等待计算完成,然后检索其结果。 |
boolean |
isCancelled() 如果此任务在正常完成之前取消,则返回 |
boolean |
isDone() 如果此任务完成,则返回 |
void |
run() 将此Future设置为其计算结果,除非它已被取消。 |
Protected methods |
|
---|---|
void |
done() 当此任务转换到状态 |
boolean |
runAndReset() 执行计算而不设置其结果,然后将此未来重置为初始状态,如果计算遇到异常或被取消,则无法执行此操作。 |
void |
set(V v) 将这个未来的结果设置为给定值,除非这个未来已经被设置或被取消。 |
void |
setException(Throwable t) 导致这个未来报告 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.util.concurrent.RunnableFuture
|
|
From interface java.lang.Runnable
|
|
From interface java.util.concurrent.Future
|
FutureTask (Callable<V> callable)
创建一个 FutureTask
,运行时将执行给定的 Callable
。
Parameters | |
---|---|
callable |
Callable : the callable task |
Throws | |
---|---|
NullPointerException |
if the callable is null |
FutureTask (Runnable runnable, V result)
创建一个 FutureTask
,它将在运行时执行给定的 Runnable
,并安排 get
在成功完成时返回给定结果。
Parameters | |
---|---|
runnable |
Runnable : the runnable task |
result |
V : the result to return on successful completion. If you don't need a particular result, consider using constructions of the form: Future<?> f = new FutureTask<Void>(runnable, null) |
Throws | |
---|---|
NullPointerException |
if the runnable is null |
boolean cancel (boolean mayInterruptIfRunning)
试图取消执行此任务。 如果任务已完成,已被取消或因其他原因无法取消,此尝试将失败。 如果成功,并且此任务在cancel
时尚未开始,则此任务不应运行。 如果任务已经启动,那么mayInterruptIfRunning
参数确定执行此任务的线程是否应该中断以试图停止任务。
在此方法返回后,对isDone()
后续调用将始终返回true
。 对后续调用isCancelled()
总是返回true
如果此方法返回true
。
Parameters | |
---|---|
mayInterruptIfRunning |
boolean : true if the thread executing this task should be interrupted; otherwise, in-progress tasks are allowed to complete |
Returns | |
---|---|
boolean |
false if the task could not be cancelled, typically because it has already completed normally; true otherwise |
V get (long timeout, TimeUnit unit)
如果需要,最多等待计算完成的给定时间,然后检索其结果(如果可用)。
Parameters | |
---|---|
timeout |
long : the maximum time to wait |
unit |
TimeUnit : the time unit of the timeout argument |
Returns | |
---|---|
V |
the computed result |
Throws | |
---|---|
CancellationException |
|
InterruptedException |
|
ExecutionException |
|
TimeoutException |
V get ()
如果需要,等待计算完成,然后检索其结果。
Returns | |
---|---|
V |
the computed result |
Throws | |
---|---|
CancellationException |
|
InterruptedException |
|
ExecutionException |
boolean isCancelled ()
如果此任务在正常完成之前取消,则返回 true
。
Returns | |
---|---|
boolean |
true if this task was cancelled before it completed |
boolean isDone ()
如果此任务完成,则返回true
。 完成可能是由于正常终止,例外或取消 - 在所有这些情况下,此方法将返回true
。
Returns | |
---|---|
boolean |
true if this task completed |
void done ()
当此任务转换到状态isDone
时调用受保护的方法(通常或通过取消)。 默认实现什么都不做。 子类可以重写此方法来调用完成回调或执行簿记。 请注意,您可以在此方法的实现中查询状态以确定此任务是否已被取消。
boolean runAndReset ()
执行计算而不设置其结果,然后将此未来重置为初始状态,如果计算遇到异常或被取消,则无法执行此操作。 这被设计用于内部执行多次的任务。
Returns | |
---|---|
boolean |
true if successfully run and reset |
void set (V v)
将这个未来的结果设置为给定值,除非这个未来已经被设置或被取消。
该方法在成功完成计算后由 run()
方法在内部调用。
Parameters | |
---|---|
v |
V : the value |
void setException (Throwable t)
导致这个未来报告一个 ExecutionException
作为其原因,除非这个未来已经被确定或被取消。
该方法在计算失败时由 run()
方法在内部调用。
Parameters | |
---|---|
t |
Throwable : the cause of failure |