FutureTask

#1. FutureTask
FutureTask实现了Runnable和Future接口,它主要用于包装真实callable或runnable的task,其run方法内运行包装的task,同时实现的Future接口可获取包装的task的结果。
在JUC提供的线程池实现中,submit方法提交callable或runnable任务,返回future用于异步获取任务结果,实际实现就是将任务包装成FutureTask,然后返回。


下图是FutureTask的状态变迁。
![FutureTask.png](http://upload-images.jianshu.io/upload_images/3009881-70055a8ced5031cb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)




其中圆圈表示用于表示FutureTask的状态,一开始的状态为New,进入红色状态表示此时调用get会立即返回(Normal则task正常结束返回结果,Exceptional表示任务异常结束,Interupting和Interuptted表示任务取消了)。


无论任何方式结束,FutureTask结束时都会调用`finishCompletion`唤醒所有因为调用`get`阻塞的线程,然后调用`done`.


`done`方法是一个空方法,用于可以继承FutureTask实现done方法用于在任务结束时做一些处理。比如:


1. guava的`ListenableFutureTask`能够在任务结束时调用listener从而实现异步非阻塞方式获取结果,这里listener的执行就是通过实现FutureTask # done在其中调用listener实现的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值