弄懂Runable,Callable,Future之间的关系

JDK1.5之前,我们创建线程有这样两种方式

1.继承Thread类

2.连接实现Runnable接口

但是这两个方法我们都没有返回值,如果需要获取任务返回结果怎么办?

然后在JDK1.5之后,官方就提供了Callable和Future,有获取任务返回结果的方法

ps:我们的Thread类本身也实现了Runnable接口


Runnable接口

我们这个接口有一个run方法,我们的返回值是void类型

Callable接口

有返回值

可以抛出异常


Future接口

Future是用来做我们的异步

我主要有这4个功能

他的功能比Runnable,Callable丰富

取消任务 cancel()

判断任务是否被取消 isCancellde()

判断任务是否执行完成 isDone()

获取任务执行结果 get()

简单理解就是:

我有一个任务,提交给了 Future 来处理。

任务执行期间我自己可以去做任何想做的事情 。并且,在这期间我还可以取消任务以及获取任务的执行状态 。一段时间之后,我就可以 Future 那里直接取出任务执行结果。


FutureTask类来进行进一步理解

我们的FutureTask实现了我们的Runnable接口和我们的Future接口

FutureTask内部可传入Callable或者Runnable对象

传入的Runnable对象会在方法内部转换为Callable对象

FutureTask相当于对Callable进行了封装,管理着任务执行的结果,存储了Callable的call方法的任务执行结果

FutureTask让我们既可以作为一个Runnable被Thread执行,也可以获取Future异步计算得到的结果

相关推荐
大春儿的试验田10 分钟前
Parameter ‘XXX‘ not found. Available parameters are [list, param1]
java
我很好我还能学35 分钟前
【面试篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
开发语言·c++
程序员JerrySUN1 小时前
[特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制
java·linux·架构
2302_809798321 小时前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器
蓝婷儿1 小时前
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
开发语言·python·学习
渣渣盟1 小时前
基于Scala实现Flink的三种基本时间窗口操作
开发语言·flink·scala
网安INF1 小时前
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
java·web安全·网络安全·flink·漏洞
一叶知秋哈1 小时前
Java应用Flink CDC监听MySQL数据变动内容输出到控制台
java·mysql·flink
jackson凌1 小时前
【Java学习笔记】SringBuffer类(重点)
java·笔记·学习
sclibingqing1 小时前
SpringBoot项目接口集中测试方法及实现
java·spring boot·后端