源码 - ThreadPoolExecutor.addWorker(Runnable, boolean)
2020-06-28 10:48:44 0 举报
JUC源码,ThreadPoolExecutor.addWorker()执行流程及源码说明
作者其他创作
大纲/内容
启动worker.threadt.start()
不满足条件return false
成功,return true
workCount是否满足条件?
失败
return false
获取线程池状态runState
往Worker的集合中添加元素,需要进行同步
抛出异常IllegalThreadStateException
将worker添加到工作线程集合workers
满足条件的情况,即可以添加Worker线程:1. runState为RUNNING;2. runState为SHUTDOWN,并且firstTask == null;
获取worker线程数量workerCount
是外层循环自旋,重新获取线程池状态
不满足条件的情况,即不允许添加Worker线程:1. workerCount超过总容量(CAPACITY)限制;2. 如果是添加核心线程(core == true),并且workerCount >= corePoolSize;3. 如果是添加非核心线程(core == true),并且workerCount >= maximumPoolSize;
shutdown等失败处理addWorkerFailed(Worker)
worker.thread是否已经启动?
重新获取线程池状态runState
unlock()
不满足条件
未启动
CAS操作将workerCount加1
lock()
创建Worker对象获取worker.thread
return
已启动
更新largestPoolSize变量
满足条件
重新检查线程池状态
否内层循环自旋,重新尝试将workerCount加1
状态是否发生了改变?
worker.thread是否启动成功?
0 条评论
下一页