Future
来自 Java DOC 文档:Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可以阻塞此方法。取消则由 cancel 方法来执行。还提供了其他方法,以确定任务是正常完成还是被取消了。一旦计算完成,就不能再取消计算。如果为了可取消性而使用 Future 但又不提供可用的结果,则可以声明 Future<?> 形式类型、并返回 null 作为底层任务的结果。
也就是说Future具有这样的特性:
- 异步执行,可用 get 方法获取执行结果。
- 如果计算还没完成,get 方法是会阻塞的,如果完成了,是可以多次获取并立即得到结果的。
- 如果计算还没完成,是可以取消计算的。
- 可以查询计算的执行状态。
埋两个小问题用于设想下怎么实现Future:
- Future在计算完成前阻塞 get 访问,完成后可以自由访问,如何实现 get 方法?
- 计算的取消是怎么实现的?被取消的计算会终止执行吗?