线程之CallableFuture 和FutureTask使用及源码分析

Posted darendu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程之CallableFuture 和FutureTask使用及源码分析相关的知识,希望对你有一定的参考价值。

一、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

以上是关于线程之CallableFuture 和FutureTask使用及源码分析的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程编程:CallableFuture和FutureTask浅析

CallableFuture和FutureTask浅析

Java并发编程:CallableFuture和FutureTask的实现

多线程 - CallableFuture 和 FutureTask 简单应用

CallableFuture和FutureTask

java并发编程:CallableFuture和FutureTask