-
- 参数类型
-
V
- 此Future的get
方法返回的结果类型
- All Known Subinterfaces:
-
RunnableFuture<V>
,RunnableScheduledFuture<V>
,ScheduledFuture<V>
- 所有已知实现类:
-
CompletableFuture
,CountedCompleter
,ForkJoinTask
,FutureTask
,RecursiveAction
,RecursiveTask
,SwingWorker
public interface Future<V>
Future
表示异步计算的结果。 提供方法以检查计算是否完成,等待其完成,以及检索计算结果。 只有在计算完成时才能使用方法get
检索结果,必要时将其阻塞直到准备就绪。 取消由cancel
方法执行。 提供了其他方法来确定任务是否正常完成或被取消。 计算完成后,无法取消计算。 如果您希望使用Future
以获取可取消性但未提供可用结果,则可以声明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
-
-