ThreadPoolExecutor 源码分析
程序员文章站
2022-04-19 11:09:46
...
首先说明的是,这个和 ReadWriteLock 一样,同样是使用一个状态,包含两部分含义,一部分是线程池的运行状态,一个是线程池中的 Worker 数量.
corePoolSize: 核心线程的数量.
maximumPoolSize: 线程池中允许的最大线程数.
keepAliveTime: 空闲线程等待的时间,超过这个时间,则销毁.
largestPoolSize: 跟踪线程池中的最大线程数
allowCoreThreadTimeOut: 是否允许核心线程超时,若允许核心线程超时,那么 keepAliveTime 同样对核心线程有效.
当线程池执行 execute 方法时:
1.判断当前的线程数 < 核心线程数
直接创建 Worker(addWorker)
addWorker:
先检查运行状态
如果线程池关闭了等情况下,创建失败
workCount+1
创建一个 Worker
如果当前线程数 > 核心线程数
那么当前任务入 workQueue 队列.
然后调用 runWorker 方法,runWorker 方法是一个循环,会处理存放在 BlockingQueue 队列中的线程, 如果 Blocking 也存放满了,那么就直接创建非核心线程. 如果创建非核心Worker 也失败了的话,那么就拒绝 Command.
在 addWorker 方法中,当创建好了 Worker 时,则调用 Worker.run 方法. 如果添加失败,则回滚(1.从 workers 集合中移除当前 worker. 2.worker数量-1. 3.尝试终止).
上一篇: 58同城怎么绑定qq账号?