关于java:线程池的状态

3次阅读

共计 683 个字符,预计需要花费 2 分钟才能阅读完成。

线程池的 5 种状态:Running ShutDown Stop Tidying Terminated

RUNNING
  • 线程池处在 RUNNING 状态时,可能接管新工作,以及对已增加的工作进行解决
  • 线程池的初始化状态是 RUNNING。换句话说,线程池被一旦被创立,就处于 RUNNING 状态,并且线程池中的工作数为 0
SHUTDOWN
  • 线程池处在 SHUTDOWN 状态时,不接管新工作,但能解决已增加的工作
  • 调用线程池的 shutdown() 接口时,线程池由 RUNNING > SHUTDOWN
STOP
  • 线程池处在 STOP 状态时,不接管新工作,不解决已增加的工作,并且会中断正在解决的工作。
  • 调用线程池的 shutdownNow() 接口时,线程池由 RUNNING 或 SHUTDOWN > STOP
TIDYING
  • 当所有的工作已终止,ctl 的工作数量为 0,线程池会变为 TIDYING 状态。当线程池变为 TIDYING 状态时,会执行钩子函数 terminated()。terminated() 在 ThreadPoolExecutor 类中是空的,若用户想在线程池变为 TIDYING 时,进行相应的解决;能够通过重载 terminated() 函数来实现
  • 当线程池在 SHUTDOWN 状态下,阻塞队列为空并且线程池中执行的工作也为空时,就会由 SHUTDOWN -> TIDYING 
  • 当线程池在 STOP 状态下,线程池中执行的工作为空时,就会由 STOP > TIDYING
TERMINATED
  • 线程池彻底终止,就变成 TERMINATED 状态 
  • 线程池处在 TIDYING 状态时,执行完 terminated() 之后,就会由 TIDYING > TERMINATED

正文完
 0