Java并发编程:Callable、Future和FutureTask
/**
* 其中Runnable实现的是void run()方法,无返回值;
* Callable实现的是V call()方法,并且可以返回执行结果。
* 其中Runnable可以提交给Thread来包装下,直接启动一个线程来执行,而Callable则一般都是提交给ExecutorService来执行
* 提交Runnable则没有返回值,futurn没有数据
* 使用submit提交任务会返回Future对象,而使用execute没有返回值。
* submit提交Runnable任务本质上也是转化为Callable去执行
*/
Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。
也就是说Future提供了三种功能:
1)判断任务是否完成;
2)能够中断任务;
3)能够获取任务执行结果。
因为Future只是一个接口,所以是无法直接用来创建对象使用的,因此就有了下面的FutureTask。
即使使用第二种构造器public FutureTask(Runnable runnable ,V result ) Runnable注入会被Executors.callable()函数转换为Callable类型,即FutureTask最终都是执行Callable类型的任务