Java并发编程:Callable、Future和FutureTask

Java并发编程:Callable、Future和FutureTask

run无返回值,call有返回值.png
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。

run无返回值故需要参数V来带回结果.png

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

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容