能说一下线程池有几种状态吗?

线程池有这几个状态:RUNNING,SHUTDOWN,STOP,TIDYING,TERMINATED。

//线程池状态
private static final int RUNNING    = -1 << COUNT_BITS;
private static final int SHUTDOWN   =  0 << COUNT_BITS;
private static final int STOP       =  1 << COUNT_BITS;
private static final int TIDYING    =  2 << COUNT_BITS;
private static final int TERMINATED =  3 << COUNT_BITS;

RUNNING

  • 在此状态下,线程池会接收新任务并处理阻塞队列中的任务。
  • 调用线程池的 shutdown() 方法会将线程池切换到 SHUTDOWN 状态。
  • 调用线程池的 shutdownNow() 方法会将线程池切换到 STOP 状态。

SHUTDOWN

  • 在此状态下,线程池不会接收新任务,但会处理阻塞队列中的任务。
  • 当队列为空且线程池中没有正在执行的任务时,进入 TIDYING 状态。

STOP

  • 在此状态下,线程池不会接收新任务,也不会处理阻塞队列中的任务,并且会中断正在运行的任务。
  • 当线程池中没有正在执行的任务时,进入 TIDYING 状态。

TIDYING

  • 在此状态下,所有的任务已经运行终止,记录的任务数量为 0。
  • 执行 terminated() 方法后,进入 TERMINATED 状态。

TERMINATED

  • 在此状态下,线程池彻底终止,不再接收任务。

注意:上述状态是线程池的大致状态流转,具体实现可能会有差异。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题