线程池的状态分为RUNNING,SHUTDOWN,STOP,TIDYING,TERMINATED
1.RUNNING:(运行状态)
-
该状态的线程池会接收新任务,并处理阻塞队列中的任务;
-
调用线程池的shutdown()方法,可以切换到SHUTDOWN状态;
-
调用线程池的shutdownNow()方法,可以切换到STOP状态;
2.SHUTDOWN:(关闭状态)
-
该状态的线程池,不会接收新任务,但是会继续处理工作队列中的任务;
-
如果工作队列为空,并且线程池中执行的任务也为空,线程池进入TIDYING状态;
3.STOP:(停止状态)
-
该状态的线程池,不会接收新任务,也不会处理工作队列中的任务,同时会中断正在运行的任务;
-
线程池中执行的任务为空,进入TIDYING状态;
4.TIDYING:(整理状态)
-
该状态表明所有的任务已经终止,工作线程的数量为0,即将调用terminated( );
5.TERMINATED:(终止状态)
-
terminated()执行完毕,表示线程池彻底终止;
总结
RUNNING 是唯一可接收新任务的状态。
SHUTDOWN 和 STOP 的核心区别:是否处理阻塞队列中已存在的任务(前者处理,后者不处理)。
TIDYING 是过渡状态,仅在所有任务和线程终止后短暂存在,用于执行自定义清理逻辑(通过重写 terminated() 方法)。
线程池一旦进入 TERMINATED 状态,无法再恢复或重新使用