MST
星途 面试题库

面试题:Java线程池中运行状态的常见判断方式

在Java线程池中,如何判断线程池处于运行状态?请列举至少两种常见的判断方式,并简述其原理。
36.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 使用isRunning方法
    • 原理ThreadPoolExecutor类提供了isRunning(int c)方法,其中cctl变量(一个原子整数,用于存储线程池的状态和工作线程数)。该方法通过对ctl变量进行位运算,提取线程池状态部分,然后判断是否处于运行状态。运行状态意味着线程池可以接受新任务并处理队列中的任务。在ThreadPoolExecutor源码中,该方法通过判断cRUNNING状态对应的掩码进行比较,如果满足条件则返回true,表明线程池处于运行状态。
  2. 通过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("线程池处于运行状态");
}