线程池生命周期的几种状态:
* RUNNING: Accept new tasks and process queued tasks
* SHUTDOWN: Don't accept new tasks, but process queued tasks
* STOP: Don't accept new tasks, don't process queued tasks,
* and interrupt in-progress tasks
* TIDYING: All tasks have terminated, workerCount is zero,
* the thread transitioning to state TIDYING
* will run the terminated() hook method
* TERMINATED: terminated() has completed
RUNNING:可以接受新的task,并且可以处理排队中的task
SHUTDOWN:不在接受新的task,但是可以执行队列中的task
STOP:不在接受新的task,并且也不再处理队列中的task
TIDYING:所有task全部终止,workerCount为0,线程调用terminated的相关方法状态切换至TIDYING
TERMINATED:terminated方法执行结束
线程池的的状态是单一方向改变的,不能逆序
RUNNING -> SHUTDOWN
On invocation of shutdown(), perhaps implicitly in finalize()
(RUNNING or SHUTDOWN) -> STOP
On invocation of shutdownNow()
SHUTDOWN -> TIDYING
When both queue and pool are empty
STOP -> TIDYING
When pool is empty
TIDYING -> TERMINATED
When the terminated() hook method has completed
Threads waiting in awaitTermination() will return when the
state reaches TERMINATED.