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

原文链接:http://www.studyshare.cn/blog/details/1141/1
java开发工具下载地址及安装教程大全,点这里。更多深度技术好文,在这里。
一、Callable

我们知道启动线程有以下两种方式(jdk源码注释中官方定义只有两种启动方式,callable不算线程启动方式)

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

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

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

线程之Callable、Future 和FutureTask使用及源码分析_第1张图片
二、调用方式

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

线程之Callable、Future 和FutureTask使用及源码分析_第2张图片
运行后结果输出:1

三、FutrueTask与Future源码分析

1、FutrueTask类实现了RunnableFutrue接口,如下图
在这里插入图片描述

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

线程之Callable、Future 和FutureTask使用及源码分析_第3张图片
由上图即可发现,FutrueTask类间接的实现了Runnable接口,从而可以使用new Thread(new FutrueTask(callable))去调用线程的start()方法启动线程。

3、继续进入Future接口中会发现get()方法
线程之Callable、Future 和FutureTask使用及源码分析_第4张图片

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

线程之Callable、Future 和FutureTask使用及源码分析_第5张图片
java开发工具下载地址及安装教程大全,点这里。更多深度技术好文,在这里。

你可能感兴趣的:(线程之Callable、Future 和FutureTask使用及源码分析)