源码 ThreadPoolExecutor.addWorker(Runnable, boolean)
2023-08-31 16:54:48 0 举报
帮助我们理解代码的含义和功能,把握方法的实现细节,进行调试和错误排查,进行教学演示,以及进行代码优化和改进。通过该剖析图,我们可以更好地理解方法的执行流程和内部机制。
作者其他创作
大纲/内容
启动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 条评论
回复 删除
下一页