Java线程池的状态
JDK1.8源码中关于状态的介绍
线程池有五种状态
从注释中可以看到,线程池有五种状态
- RUNNING
会接收新任务并且会处理队列中的任务 - SHUTDOWN
不会接收新任务并且会处理队列中的任务 - STOP
不会接收新任务并且不会处理队列中的任务,并且会中断在处理的任务(注意:一个任务能不能被中断得看任务本身) - TIDYING
所有任务都终止了,线程池中也没有线程了,这样线程池的状态就会转为TIDYING,一旦达到此状态,就会调用线程池的terminated() - TERMINATED
terminated()执行完之后就会转变为TERMINATED
线程池状态转换
- RUNNING → SHUTDOWN
手动调用shutdown()触发,或者线程池对象GC时会调用finalize()从而调用shutdown() - (RUNNING or SHUTDOWN) → STOP
调用shutdownNow()触发,如果先调shutdown()紧着调shutdownNow(),就会发生SHUTDOWN → STOP - SHUTDOWN→ TIDYING
队列为空并且线程池中没有线程时自动转换 - STOP → TIDYING
线程池中没有线程时自动转换(队列中可能还有任务) - TIDYING → TERMINATED
terminated()执行完后就会自动转换