ThreadPoolExecutor - addWorker - 执行流程
2019-05-23 13:56:25 0 举报
ThreadPoolExecutor - addWorker - 执行流程
作者其他创作
大纲/内容
是
线程池是否为SHUTDOWN状态
tryTerminate()
线程池是否处于运行状态
否
根据条件判断是否需要把当前Worker集合的大小作为Worker个数的最大值记录下来
CAS将Worker数量-1
wc>=CAPACITY
结束(失败)
获取当前worker的数量wc
启动w线程
解锁
当前要添加的是否为核心Worker(core)
将w对象添加进Worker集合中
操作CAS将Worker数量+1
当前运行状态是否已经被修改(与rs进行比较)
结束(成功)
获取当前线程池的状态rs
rs == SHUTDOWN
w中的线程是否还存活
wc>=maximumPoolSize
firstTask & core
任务队列是否还有任务
wc>=corePoolSize
设置w线程启动标志为true
判断w内部Thread对象是否已创建
是否修改成功
线程池是否正在运行(rs == RUNNING)
获取当前线程池运行状态rs
false
true
是否有提交新任务(firstTask != null)
抛IllegalThreadStateException异常
设置w已添加标记的值为true
判断w线程是否启动
新增Worker失败处理
判断是否已添加w
创建Worker对象w
上锁
判断w对象是否为空
decrementWorkerCount()
CAS操作是否成功
从Worker集合中移除w
开始
0 条评论
下一页