-
- 参数类型
-
V
- 该未来get
方法返回的结果类型
- All Known Subinterfaces:
-
Response<T>
,RunnableFuture<V>
,RunnableScheduledFuture<V>
,ScheduledFuture<V>
- 所有已知实现类:
-
CompletableFuture
,CountedCompleter
,ForkJoinTask
,FutureTask
,RecursiveAction
,RecursiveTask
,SwingWorker
,Task
public interface Future<V>
AFuture
表示异步计算的结果。 提供方法来检查计算是否完成,等待其完成,并检索计算结果。 只有当计算完成后,才能使用方法get
检索结果,如果需要,则阻塞,直到准备就绪。 取消由cancel
方法执行。 提供其他方法来确定任务是否正常完成或被取消。 计算完成后,不能取消计算。 如果您想使用Future
,为了不可撤销,但不提供可用的结果,您可以声明表单Future<?>
类型并返回null
作为基础任务的结果。示例使用 (请注意,以下课程都是化妆品。)
interface ArchiveSearcher { String search(String target); } class App { ExecutorService executor = ... ArchiveSearcher searcher = ... void showSearch(String target) throws InterruptedException { Callable<String> task = () -> searcher.search(target); Future<String> future = executor.submit(task); displayOtherThings(); // do other things while searching try { displayText(future.get()); // use future } catch (ExecutionException ex) { cleanup(); return; } } }
FutureTask
类是实现Future
,实现Runnable
,所以可以由一个Executor
执行。 例如,上述结构用submit
可以替换为:FutureTask<String> future = new FutureTask<>(task); executor.execute(future);
内存一致性效果:通过异步计算采取的行动happen-before个动作以下相应
Future.get()
在另一个线程。- 从以下版本开始:
- 1.5
- 另请参见:
-
FutureTask
,Executor
-
-
方法详细信息
-
cancel
boolean cancel(boolean mayInterruptIfRunning)
尝试取消执行此任务。 如果任务已经完成,已经被取消或由于某种其他原因而无法取消,则此尝试将失败。 如果成功,并且当cancel
时此任务尚未启动,则此任务不应运行。 如果任务已经启动,则mayInterruptIfRunning
参数确定执行此任务的线程是否应该中断,以试图停止该任务。此方法返回后,对
isDone()
的后续调用将始终返回true
。 对后续调用isCancelled()
总是返回true
如果此方法返回true
。- 参数
-
mayInterruptIfRunning
-true
如果执行该任务的线程应该被中断; 否则,正在进行的任务被允许完成 - 结果
-
false
如果任务无法取消,通常是因为它已经正常完成; 否则为true
-
isCancelled
boolean isCancelled()
如果此任务在正常完成之前被取消,则返回true
。- 结果
-
true
如果此任务在完成之前被取消
-
isDone
boolean isDone()
如果此任务完成,则返回true
。 完成可能是由于正常终止,异常或取消 - 在所有这些情况下,此方法将返回true
。- 结果
-
true
如果此任务完成
-
get
V get() throws InterruptedException, ExecutionException
等待计算完成,然后检索其结果。- 结果
- 计算结果
- 异常
-
CancellationException
- 如果计算被取消 -
ExecutionException
- 如果计算抛出异常 -
InterruptedException
- 如果当前线程在等待时中断
-
get
V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
如果需要等待最多在给定的时间计算完成,然后检索其结果(如果可用)。- 参数
-
timeout
- 等待的最长时间 -
unit
- 超时参数的时间单位 - 结果
- 计算结果
- 异常
-
CancellationException
- 如果计算被取消 -
ExecutionException
- 如果计算引发异常 -
InterruptedException
- 如果当前线程在等待时中断 -
TimeoutException
- if the wait timed out
-
-