弄懂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异步计算得到的结果

相关推荐
报错小能手5 分钟前
Go 语言结构 基础语法
开发语言·后端·golang
Lazionr6 分钟前
stack与queue:底层实现与容器适配器
开发语言·数据结构·c++
Hello_Damon_Nikola29 分钟前
CH573从入门到精通
c语言·开发语言·单片机·嵌入式硬件
Logintern0937 分钟前
Langgraph使用MemorySaver建立有记忆的图
开发语言·windows·python
counting money38 分钟前
Spring AI Alibaba 从入门到实战:构建企业级 AI 应用
java·人工智能·spring
豆沙沙包?1 小时前
C++~~~vector容器(p31-P40)
开发语言·c++
原野池予1 小时前
深入Java集合框架:数组与List互转底层原理剖析(JDK 8)
java·数据结构·list
必须会一定会1 小时前
GLM-5.3 迁移实战:强制思考、1M 上下文与官方编程基准
android·开发语言·kotlin
牛油果子哥q1 小时前
C++STL容器详解:vector/list/string底层扩容、迭代器失效终极解决、容器选型避坑
开发语言·c++·list
Java成神之路-1 小时前
深入理解 HashMap 扩容时机:JDK 7 vs JDK 8 的设计差异与取舍
java·juc