一、前言
在上文Java并发编程(一)—— FutureTask超详细教程 中对Future
进行了详细讲解,Future
是Java5
添加的类,用来描述一个异步计算的结果。可以用isDone
方法来检查计算是否完成,或者使用get
阻塞住调用线程,直至计算完成返回结果,也可以用cancel
方法来停止任务的执行。
Future
以及相关使用方法提供了异步执行任务的能力,但对于结果的获取却是不方便,只能通过阻塞或轮询的方式得到任务结果。阻塞的方式与我们理解的异步编程其实是相违背的,而轮询又会耗无谓的CPU
资源。
Future
的主要缺点:
- 不支持手动触发完成
提交一个任务,因执行过慢,已通过其他途径获取到任务结果,但没法把任务结果通知到正在执行的线程,必须主动取消或者一直等待其执行完成。 - 不支持进一步的非阻塞调用
通过Future
的get
方法会一直阻塞到任务完成,但想在获取任务之后执行额外的任务,因为Future
不支持回调函数,所以无法实现这个功能