https://www.bilibili.com/video/BV1mN411B7fC

线程池有五种状态:
- RUNNING:线程池正常运行中,可以正常的接受并处理任务;
- SHUTDOWN:线程池关闭了,不能接受新任务,但是线程池会把阻塞队列中的剩余任务执行完,剩余任务都处理完之后,会中断所有工作线程。
- STOP:线程池终止了,不能接受新任务,并且也不会处理阻塞队列中的任务,会中断所有工作线程
- TIDYING:所有任务都终止了,线程池中也没有线程了,这样线程池的状态就会转为 TIDYING,一旦达到此状态,就会调用线程池的 terminated();
- TERMINATED:terminated() 执行完之后就会转变为 TERMINATED,在 ThreadPoolExecutor 中 terminated() 是一个空方法,可以自定义线程池重写这个方法;
这五种状态并不能任意转换,只会有以下几转换情况:
- RUNNING -SHUTDOWN():手动调用 shutdown() 触发,或者线程池对象 GC 时会调用 finalize() 从而 shutdown();
- (RUNNING or SHUTDOWN)→ STOP:调用 shutdownNow() 触发,如果先调用 shutdown() 紧接着调 shutdownNow(),就会发生 SHUTDOWN → STOP
