可以通过其提供的get方法,在FutureTask不同的状态下,以阻塞或者直接返回的方式或者结果。
FutureTask实现了Future和Runnable接口。以FutureTask是否调用了run方法,可以简单分为三种状态
1. 未启动。 run方法未执行。
2. 已启动。 run方法执行。
3. 已完成。 run方法正常执行完毕,或者调用cancel取消,或者run方法执行过程中抛出异常。
强调以上不同状态的特性,是为了突出一下这个场景的使用:多线程执行任务,任务只被执行一次。
FutureTask正常执行完成会返回值(不会再次执行),若中断,正在中断,或者取消时抛出异常。
看下代码,落地下:
Class TaskHandler{
// 记录执行过的任务
private final ConcurrentHashMap
【#|FutureTask 使用场景介绍】以上代码有个小细节,这里指出一下。taskCache.remove(taskName, future),可不可以用taskCache.remove(taskName)?答案是可以的,前者是找到taskName对应的index后,调用future的equal判断是否是同一个对象,后者通过对taskName指针地址或者hashcode进行判断是否是同一个对象的。推荐使用第二种remove方法,因为String重写了equal和hashcode。
推荐阅读
- 数据结构和算法|LeetCode 的正确使用方式
- #|7.分布式事务管理
- #|算法设计与分析(Java实现)——贪心算法(集合覆盖案例)
- #|算法设计与分析(Java实现)—— 动态规划 (0-1 背包问题)
- #|阿尔法点亮LED灯(一)汇编语言
- #|Multimedia
- #|ARM裸机开发(汇编LED灯实验(I.MX6UL芯片))
- 基础课|使用深度优先搜索(DFS)、广度优先搜索(BFS)、A* 搜索算法求解 (n^2 -1) 数码难题,耗时与内存占用(时空复杂度)对比(附((n^2 - 1) 数码问题控
- #|学习笔记 | Ch05 Pandas数据清洗 —— 缺失值、重复值、异常值
- win10|搏一搏 单车变摩托,是时候捣鼓一下家中的小米电视机啦。