Java的Future接口
Java的Future接口
Java 中的 Future 接口和其实现类 FutureTask,代表了异步计算的结果。 1. Future接口简介
Future 是 异步计算结果 的容器接口,它提供了下面这些功能: 在等待异步计算完成时检查计算结果是否完成 在异步计算完成后获取计算结果 在异步计算完成前取消
Future 可以用于耗时的异步计算任务。例如我们把 Runnable 接口或 Callable 接口的实现类提交到线程池时,线程池会返回一个 FutureTask 对象。 Future submit(Callable task) Future submit(Runnable task, T result)
下文会再解释 FutureTask,这是 Future 接口的一个实现类。Future 接口提供了下面这些方法
Modifier and Type
Method
Description
boolean
cancel(boolean mayInterruptIfRunning)
尝试取消执行此任务。
V
get()
等待计算完成,然后检索其结果。
V
get(long timeout, TimeUnit unit)
如果需要等待最多在给定的时间计算完成,然后检索其结果(如果可用)。
boolean
isCancelled()
如果此任务在正常完成之前被取消,则返回 true 。
boolean
isDone()
返回 true 如果任务已完成。2. FutureTask的使用
可以将 FutureTask 交给 Executor 执行,也可以通过 ExecutorService.submit(...) 方法返回一个 FutureTask,然后执行 get 方法或 cancel 方法。
也可以单独使用 FutureTask,比如下面的代码就实现了一种需求:一个线程必须等待另一个线程把某个任务执行完后它才能继续执行。假设有多个线程执行若干个任务,每个任务最多只能同时被执行一次,多个线程试图执行同一个任务时,只允许一个线程执行任务,其他线程等待这个任务执行完后才能继续执行。public class ConcurrentTask { private final ConcurrentMap