Future
最后更新于
最后更新于
Future 表示一个任务的生命周期,并提供了相应的方法来判断是否已经完成或取消,以及获取任务的结果和取消任务等。在 Future 规范中包含的隐含意义是,任务的生命周期只能前进,不能后退。当某个任务完成后,它就永远停留在“完成”状态上。
get 方法的行为取决于任务的状态(尚未开始、正在运行、已完成):
如果任务已经完成,那么 get 会立即返回或者抛出一个 Exception,如果任务没有完成,那么 get 将阻塞并直到任务完成。
如果任务抛出了异常,那么 get 将该异常封装为 ExecutionException 并重新抛出。如果 get 抛出了 ExecutionException,那么可以通过 getCause 来获得被封装的初始异常。
如果任务被取消,那么 get 将抛出 CancellationException。
可以通过许多种方法创建一个 Future 来描述任务:
从 Java 6 开始,ExecutorService 实现可以改写 AbstractExecutorService 中的 newTaskFor 方法,从而根据已提交的 Runnable 或 Callable 来控制 Future 的实例化过程。
在默认实现中仅创建了一个新的 FutureTask: