线程池一共有五种状态
状态 | 含义 |
---|---|
RUNNING | 会接受新任务并且会处理队列中的任务 |
SHUTDOWN | 不会接受新任务并且会处理队列中的任务,任务处理完之后中断所有线程 |
STOP | 不会接受新任务并且不会处理队列中的任务,并且会直接中断所有线程 |
TIDYING | 所有线程停止之后,线程池的状态就会转化为TIDYING,一旦达到该状态,就会调用线程池的terminated() |
TERMINATED | terminated()执行完之后会转变为此状态 |
上面五种状态不是随意转换的,只能有下述六种状态变化过程
变化前 | 变化后 | 变化条件 |
---|---|---|
RUNNING | SHUTDOWN | 手动调用shutdown()触发或者线程池对象GC时会调用finalize()从而调用shutdown() |
RUNNING | STOP | 手动雕鹰shutdownNow()触发 |
SHUTDOWN | STOP | 手动调用shutdown()后再调用shutdownNow() |
SHUTDOWN | TIDYING | 线程池所有线程都停止后自动触发 |
STOP | TIDYING | 线程池所有线程都停止后自动触发 |
TIDYING | TERMINATED | 线程池自动调用terminated()后触发 |