ThreadPoolExecutor - about
2021-02-01 15:25:32 0 举报
ThreadPoolExecutor 线程池主流程分析; 只是体系建立概览; 问题分析处理流程
作者其他创作
大纲/内容
申请Worker 非重入锁
开始
总结优化经验
该线程是否为可回收线程
申请任务
是
否
结束
优化手段
修代码
新增线程数是否超过对应核心数
是
线程数小于核心线程
建立知识体系
SHUTDOWN
申请增加线程
频繁GC
知识体系建立
因果分析
快速止损
返回NULL
否
增加线程
任务申请
制定标准
是否申请到新任务
保留现场
阻塞队列已满
获取线程数量
线程池是否处于STOP后状态
复盘(可选)
限时获取任务
阻塞获取任务
系统内存使用增大
场景调优实践
线程是否用于执行剩余任务
正常
任务结束
线程池是否已经停止运行
启动线程
shutdown()
指标观测
线程池状态是否改变
线程池是否存在
登记线程数成功
登记线程数
操作系统SWAP
多个请求之间CPU冲突变多
线程是否超过容量
执行任务
TIDYUNG
线程池是否正在停止
ThreadPoolExecutor运行的五种状态RUNING:能接受新提交的任务,并且也能处理阻塞队列中的任务SHUTDOWN:关闭状态,不能再接受新提交任务,但可以继续处理阻塞队列中已保存的任务STOP: 不能接受新任务,也不处理阻塞队列中的任务,会中断正在处理任务的线程TIDYING: 所有任务都已经停止,workCount(有效线程数)为0TERMINATED: 在terminated()方法执行完毕后进入该状态
terminated()
任务调度
线程中断
任务拒绝
线程池是否已停止
Worker线程执行任务在Worker类中的run方法调用了runWorker方法来执行任务,runWorker方法的执行过程如下:1.while循环不断地通过getTask()方法获取任务。2.getTask()方法从阻塞队列中取任务。3.如果线程池正在停止,那么要保证当前线程是中断状态,否则要保证当前线程不是中断状态。 4.执行任务。 5.如果getTask结果为null则跳出循环,执行processWorkerExit()方法,销毁线程。
STOP
TERMINATED
确认评价指标
释放Worker 非重入锁
线程数小于最大线程数
线程现阶段是否过多
线程池中工作线程数量为0
添加任务到阻塞队列等待工作线程获取执行
单次请求时间变长
增加线程失败
获取任务 - getTask
添加工作线程并执行
RUNNING
服务并行处理的线程变多
上线灰度
销毁线程
线程池生命周期
循环、重新申请新任务
提交任务
ThreadPoolExecutor
执行任务 - runWorker
异常
系统彻底崩溃
根因分析
shutdownNow()
获取线程池状态及线程数量
申请线程 - addWorker
调GC、基础资源
阻塞队列为空,线程池中工作线程数量为0
0 条评论
下一页