ThreadPoolExecutor
2021-11-04 18:47:31 5 举报
ThreadPoolExecutor
作者其他创作
大纲/内容
processWorkerExit
从阻塞队列中获取任务
获取该工作线程里的第一个任务
释放锁
表示不执行队列中的任务了,自然返回null
将工作线程从集合缓存中删除
否
是
线程数到达限制
rs > SHUTDOWN
addWorker
获取到任务
获得该工作线程内的互斥锁
等待队列是否满了
是否获取到任务
将任务放到队列中
更新最大线程数
根据拒绝策略来处理
在第三个判断会返回null
新增线程失败
获取线程池的可重入锁
判断是否需要重新创建一个工作线程来补偿
结束
工作线程数-1
任务是否为空
将线程放入线程集合中
执行工作线程
继续
创建一个新的线程来执行任务
完成的任务+1
runWorker
处理线程结束工作
返回null
根据线程数,超时,阻塞队列判断是否结束线程
CAS使workerCount+1成功
更新线程池的任务完成数
rs == SHUTDOWN并且队列为空
getTask
返回任务
超时没获取到任务
提交任务
启动线程
向线程池提交任务
直接调用任务的run方法执行任务
线程数是否到达核心线程数
状态大于关闭状态 || 状态是关闭状态并且传进来的第一次任务不为空 ||状态是关闭状态并且等待队列为空
状态是否改变了
处理工作线程退出
从阻塞队列获取任务
创建工作线程
线程数是否到达最大上限
尝试创建新的工作线程
线程异常结束(包括中断结束)
设置超时标志timedOut = true
0 条评论
下一页