线程的状态
我们都知道线程的状态 可以分为 创建(NEW)、运行(RUNNABLE)、阻塞(BLOCK)、等待(WAITING/TIMED-WAITING)和结束(TERMINATED)
线程池状态
线程是线程池的一部分,线程的状态和线程数量决定着线程池的状态,Java把线程池的状态分为五种:
- 运行(RUNNING):该状态下的线程池接收新任务并处理队列中的任务;线程池创建完毕就处于该状态,也就是正常状态;
- 关机(SHUTDOWN):线程池不接受新任务,但处理队列中的任务;线程池调用
shutdown()
之后的池状态; - 停止(STOP):线程池不接受新任务,也不处理队列中的任务,并中断正在执行的任务;线程池调用
shutdownNow()
之后的池状态; - 清理(TIDYING):线程池所有任务已经终止,
workCount
(当前线程数)为0;过渡到清理状态的线程将运行terminated()
钩子方法; - 终止(TERMINATED):当线程池处于
SHUTDOWN或STOP
状态,并且所有工作线程已经销毁,任务缓存队列已经清空或执行结束后,线程池被设置为TERMINATED
状态,terminated()
方法结束后的线程池状态;
ThreadPoolExecutor
ThreadPoolExecutor就是我们口中常说的线程池
在ThreadPoolExecutor
用一个AtomicInteger
变量ctl
来表示,变量ctl可以说明线程池的两个属性:工作线程数(workerCount)和运行状态(runState);,另外定义了几个static final
变量表示线程池的各个状态。
AtomicInteger
是int类型的原子包装类,最大的特点就是线程安全,所以其本质上还是个int值;那么int类型是4个字节&#x