码迷,mamicode.com
首页 > 编程语言 > 详细

线程之Callable、Future 和FutureTask使用及源码分析

时间:2019-04-27 14:41:49      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:接收   9.png   lan   ges   方式   ack   share   技术   tail   

一、Callable

我们知道启动线程有以下两种方式(jdk源码注释中官方定义只有两种启动方式,callable不算线程启动方式) 原文链接:http://www.studyshare.cn/blog-front/blog/details/1141

(1)、new Thread().start()

(2)、new Thread(new Runnable()).start();

以上两种方式中的run()方法的返回值是void类型,即没有返回值,如果我们需要在业务线程中执行业务代码后需要将结果进行返回怎么办呢?即使用Callable,如下:

技术图片
 

二、调用方式

当使用Callable定义后如何调用,我们发现Thread类并没有接收Callable参数的构造方法,只有接收Runnable接口参数的构造方法,此时我们需要用到一个包装类FutrueTask将Callable进行包装,包装成Runnable,然后传递给Thread的构造方法即可。

技术图片
 

运行后结果输出:1

三、FutrueTask与Future源码分析

1、FutrueTask类实现了RunnableFutrue接口,如下图

技术图片
 

2、RunnableFutrue接口继承了Runnable和Futrue接口,如下图

技术图片
 

由上图即可发现,FutrueTask类间接的实现了Runnable接口,从而可以使用new Thread(new FutrueTask(callable))去调用线程的start()方法启动线程。

3、继续进入Future接口中会发现get()方法

技术图片
 

因此FutrueTask可以通过调用get()方法获取到返回的结果。用一张图来总结以上几个类和接口之间的关系,如下图:

技术图片
 

更多深度技术好文:http://www.studyshare.cn/blog-front//index

线程之Callable、Future 和FutureTask使用及源码分析

标签:接收   9.png   lan   ges   方式   ack   share   技术   tail   

原文地址:https://www.cnblogs.com/darendu/p/10778671.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!