线程池FutureTask浅谈

一,概述

FuturnTask实现了Future与Runnable接口,笔者知道,ThreadPoolExecutor#submit可以传入Callable接口而非Runnable,区别点在于Callable可以返回值,而整个FuturnTask可以理解为Callable设计,用来优雅地异步获取执行结果,无需手动Condition去实现。

围绕此,需知道Future接口及其方法的定义,

cancel:取消此任务,注意不是销毁线程任务,只是让get抛出CancelException异常,参数可以用来标记是否中断Thread。

isCancelled、isDone:状态方法

get:提供两个版本,没有参数版本表示无限制阻塞等待结果,有参数的是超时阻塞等待。

以上即Future接口定义,而直接实现是FutureTask

二,实现原理

1,submit

JUC包中,ExecutorService抽象实现类AbstractExecutorService实现了submit方法,

笔者跟进此方法实现,其余重载有submit(Runnable task),本质是封装为返回默认值的Callable。

从submit实现可知,Callable会被转换为RunnableFuture,随后放入线程池队列执行,那么RunnableFuture实现是什么呢?答案就是FutureTask

既然是线程池,咱们跟进FuturTask#run

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值