一张图分析FutureTask的执行流程!

268 阅读1分钟

#多线程

FutureTask 类图

FutureTask 流程分析

FutureTask 疑问记录

FutureTask 为何又自己实现了一个阻塞队列?

FutureTask 自己实现阻塞队列,没有使用 AQS 相关的流程,也没有使用如 Condition 之类的一些辅助类,个人认为有以下原因:

  • 其它组件太重了,FutureTask 只需要维持一个队列记录等待的线程即可就可,不需要其它复杂的并发控制。Condition 需要执行的线程持有同一把锁,ReentrantLock 中的共享锁需要指定共入线程的数量,非共享锁仅一个线程可以进入,对于未知数量线程调用且无需锁控制的 FutureTask 来说是不合适的。