1、Executor框架使用Runnable作为其任务的基本表达形式。Runnable相当有限,不能返回一个值,也不能抛出受检查的异常,对于复杂费时的计算更加无法处理
2、因此产生了Callable和Future这种任务,对任务进行全面管理
3、
1)Callable在主进入点-call处等待返回值,并为可能抛出的异常预先做了准备。
2)Executors包含了一些工具方法将其他类型的任务封装成一个Callable,比如Runnable和java.security.PrivilegedAction。Runnable和Callable描述的是抽象的计算型任务。
3)这些任务很有限,有明确的开始和结束,但是对于非常费时的任务比较麻烦,对于已经提交但尚未开始的任务可以取消,但是对于已经开始的任务,只有它们响应中断,才可以取消。
4、
1)Future描述了任务的生命周期,并提供了相关的方法来获得任务的结果、取消任务以及检验任务已经完成还是被取消。
2)Future意味着任务完成后永远停留在完成状态上,就像ExecutorService的生命周期。使用get方法完成任务和异常处理。
3)ExecutorService中的所有submit方法都返回一个Future,可以将一个Runnable或一个Callable提交给executor,然后得到一个Future。也可以显式地为给定的Runnable或Callable实例化一个FutureTask