上海建设网站制作,sem竞价托管费用,怎么提高网站权重,龙岩网红打卡地Java线程池ThreadPoolExecutor的状态
ThreadPoolExecutor使用一个AtomicInteger变量#xff08;ctl#xff09;同时保存线程池的运行状态#xff08;runState#xff09;和工作线程数#xff08;workerCount#xff09;#xff0c;其中高3位表示状态#xff0c;低29位…Java线程池ThreadPoolExecutor的状态
ThreadPoolExecutor使用一个AtomicInteger变量ctl同时保存线程池的运行状态runState和工作线程数workerCount其中高3位表示状态低29位表示工作线程数。
线程池的5种状态 RUNNING运行状态 状态值111最高3位特点 可以接收新任务可以处理队列中的任务 这是线程池的初始状态正常工作时的状态 SHUTDOWN关闭状态 状态值000特点 不会接收新任务但会处理队列中已存在的任务 通过调用shutdown()方法进入此状态 STOP停止状态 状态值001特点 不会接收新任务不会处理队列中的任务会中断正在执行的任务 通过调用shutdownNow()方法进入此状态 TIDYING整理状态 状态值010特点 所有任务已终止workerCount为0线程池即将执行terminated()钩子方法 这是过渡状态自动进入 TERMINATED终止状态 状态值011特点 terminated()方法已完成 线程池完全终止
状态转换流程
RUNNING - SHUTDOWN调用shutdown()(RUNNING或SHUTDOWN) - STOP调用shutdownNow()
SHUTDOWN - TIDYING队列和池都为空
STOP - TIDYING池为空
TIDYING - TERMINATEDterminated()执行完毕状态判断方法
ThreadPoolExecutor提供了几个方法来判断状态
isShutdown() // 返回true如果状态不是RUNNING
isTerminating() // 返回true如果状态是SHUTDOWN或STOP
isTerminated() // 返回true如果状态是TERMINATED状态的实际应用
当提交新任务时线程池会检查状态是否为RUNNING工作线程在执行任务前会检查线程池状态状态决定了如何处理队列中的任务和中断信号
理解这些状态对于正确使用线程池和诊断线程池问题非常重要特别是在处理线程池关闭和任务拒绝策略时。