线程池工作流程
2024-04-05 11:26:04 11 举报
线程池工作流程
作者其他创作
大纲/内容
否
processWorkerExit
如果当前线程池状态不是 STOP,其实正常结束的任务,当还有任务任务需要执行,但没有工作线程时
是否成功入队
是
线程池是否调用了shutdown
创建 Worker 并添加到workers
线程池是否停止工作,并能成功出队
工作线程是否为 0
当前线程数是否小于核心线程数
线程池是否在stop状态,或者是SHUTDOWN状态,且队列为空
execute
有线程执行,或能从队里里面拿到
启动 worker 线程
简单说就是有任务切不是 stop, 则必须执行完
afterExecute执行后操作
线程是否已经停止
getTask获取任务
移除任务,调用拒绝策略
当工作线程数量大于最大线程数,或者允许关闭核心线程,且当前工作线程大于核心线程数并超时了。并且当前工作线程大于 1 或者队列为 null
中断
run
有点绕,简单说就是可以回收当前线程了
减少工作线程数量并返回 null
减少工作线程数量,没有调用的情况下会在 getTask 中减少
tryTerminate尝试结束线程池
Runnable.run实际执行的任务
completedTaskCount把当前工作线程处理的任务数量加到总的上面去
addWorker
没有任务需要执行
增加工作线程数量
runWorker
workers从集合中移除
当线程调用了shutdown,shutdownNow时,或者工作线程大于最大线程数时。返回 false
从阻塞队列中获取任务
保证有工作线程
completedTasks增加当前工作线程已完成数量
beforeExecute执行前操作
0 条评论
下一页