MST

星途 面试题库

面试题:Java线程池状态:常见状态及转换

请简述Java线程池中常见的几种状态,并说明在什么情况下线程池会从一种状态转换到另一种状态。
48.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. 常见状态

  • RUNNING: 线程池处于运行状态,可以接受新任务并处理队列中的任务。
  • SHUTDOWN: 不再接受新任务,但会继续处理队列中已有的任务。调用 shutdown() 方法后,线程池进入此状态。
  • STOP: 不再接受新任务,也不再处理队列中的任务,并且会中断正在执行的任务。调用 shutdownNow() 方法后,线程池进入此状态。
  • TIDYING: 所有任务都已终止,工作线程数为0。当线程池进入 SHUTDOWN 状态且队列和正在执行的任务都为空,或者进入 STOP 状态且工作线程数为0时,线程池会转换到此状态。
  • TERMINATED: 线程池彻底终止。当线程池进入 TIDYING 状态后,会执行 terminated() 钩子方法,执行完毕后,线程池进入 TERMINATED 状态。

2. 状态转换

  • RUNNING -> SHUTDOWN: 调用 shutdown() 方法,线程池不再接受新任务,但会继续处理队列中的任务。
  • RUNNING or SHUTDOWN -> STOP: 调用 shutdownNow() 方法,线程池不再接受新任务,中断正在执行的任务,抛弃队列中的任务。
  • SHUTDOWN -> TIDYING: 当线程池处于 SHUTDOWN 状态,且所有任务(包括队列中的任务)都执行完毕,工作线程数为0时,线程池转换到 TIDYING 状态。
  • STOP -> TIDYING: 当线程池处于 STOP 状态,所有正在执行的任务被中断,工作线程数为0时,线程池转换到 TIDYING 状态。
  • TIDYING -> TERMINATED: 当线程池进入 TIDYING 状态后,terminated() 钩子方法执行完毕,线程池转换到 TERMINATED 状态。