- 使用
isRunning
方法
- 原理:
ThreadPoolExecutor
类提供了isRunning(int c)
方法,其中c
是ctl
变量(一个原子整数,用于存储线程池的状态和工作线程数)。该方法通过对ctl
变量进行位运算,提取线程池状态部分,然后判断是否处于运行状态。运行状态意味着线程池可以接受新任务并处理队列中的任务。在ThreadPoolExecutor
源码中,该方法通过判断c
与RUNNING
状态对应的掩码进行比较,如果满足条件则返回true
,表明线程池处于运行状态。
- 通过
getState
方法结合状态常量判断
- 原理:
ThreadPoolExecutor
类的getState()
方法返回当前线程池的状态。线程池有几种状态,如RUNNING
(运行)、SHUTDOWN
(关闭,不再接受新任务,但会处理队列中的任务)、STOP
(停止,不再接受新任务,也不处理队列中的任务,中断正在执行的任务)等。可以获取到这个状态值后,与ThreadPoolExecutor
类中的RUNNING
状态常量进行比较,如果相等,则说明线程池处于运行状态。例如:
ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
if(executor.getState() == ThreadPoolExecutor.RUNNING){
System.out.println("线程池处于运行状态");
}