Java并发编程:Callable、Future和FutureTask

Java并发编程:Callable、Future和FutureTask

Java并发编程:Callable、Future和FutureTask_第1张图片
run无返回值,call有返回值.png
Java并发编程:Callable、Future和FutureTask_第2张图片
Paste_Image.png
/** 
 * 其中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。

Java并发编程:Callable、Future和FutureTask_第3张图片
run无返回值故需要参数V来带回结果.png

即使使用第二种构造器public FutureTask(Runnable runnable ,V result ) Runnable注入会被Executors.callable()函数转换为Callable类型,即FutureTask最终都是执行Callable类型的任务

你可能感兴趣的:(Java并发编程:Callable、Future和FutureTask)