-
- 参数类型
-
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
-
-