当前位置: 首页 > java >正文

Java线程池ThreadPoolExecutor的状态

Java线程池ThreadPoolExecutor的状态

ThreadPoolExecutor使用一个AtomicInteger变量(ctl)同时保存线程池的运行状态(runState)和工作线程数(workerCount),其中高3位表示状态,低29位表示工作线程数。

线程池的5种状态

  1. RUNNING(运行状态)

    • 状态值:111(最高3位)
    • 特点:
      • 可以接收新任务
      • 可以处理队列中的任务
    • 这是线程池的初始状态,正常工作时的状态
  2. SHUTDOWN(关闭状态)

    • 状态值:000
    • 特点:
      • 不会接收新任务
      • 但会处理队列中已存在的任务
    • 通过调用shutdown()方法进入此状态
  3. STOP(停止状态)

    • 状态值:001
    • 特点:
      • 不会接收新任务
      • 不会处理队列中的任务
      • 会中断正在执行的任务
    • 通过调用shutdownNow()方法进入此状态
  4. TIDYING(整理状态)

    • 状态值:010
    • 特点:
      • 所有任务已终止
      • workerCount为0
      • 线程池即将执行terminated()钩子方法
    • 这是过渡状态,自动进入
  5. TERMINATED(终止状态)

    • 状态值:011
    • 特点:
      • terminated()方法已完成
    • 线程池完全终止

状态转换流程

RUNNING -> SHUTDOWN(调用shutdown())(RUNNING或SHUTDOWN) -> STOP(调用shutdownNow())
SHUTDOWN -> TIDYING(队列和池都为空)
STOP -> TIDYING(池为空)
TIDYING -> TERMINATED(terminated()执行完毕)

状态判断方法

ThreadPoolExecutor提供了几个方法来判断状态:

isShutdown()  // 返回true如果状态不是RUNNING
isTerminating() // 返回true如果状态是SHUTDOWN或STOP
isTerminated() // 返回true如果状态是TERMINATED

状态的实际应用

  1. 当提交新任务时,线程池会检查状态是否为RUNNING
  2. 工作线程在执行任务前会检查线程池状态
  3. 状态决定了如何处理队列中的任务和中断信号

理解这些状态对于正确使用线程池和诊断线程池问题非常重要,特别是在处理线程池关闭和任务拒绝策略时。

http://www.xdnf.cn/news/14185.html

相关文章:

  • ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘%‘
  • 基于 C 语言的图书管理系统开发详解​
  • 基于YOLOv11+PP-OCRv5深度学习的智能车牌检测与识别系统python源码+pytorch模型+评估指标曲线+精美GUI界面
  • 【SpringMVC 入门介绍】
  • 零基础RT-thread第二节:按键控制
  • Redux 原理深度剖析
  • 备忘录模式:文本编辑器撤销功能实现
  • 2025年渗透测试面试题总结-字节跳动[实习]安全研究员(题目+回答)
  • 浏览器 报502 网关错误,解决方法2
  • 论文精读Lami-Detr:Open-Vocabulary Detection with Language Model Instruction
  • 芯片的起点——从硅到晶圆制造
  • 用Python写一个可视化大屏
  • 简说ping、telnet、netcat
  • 论文阅读-单目视觉惯性系统时间标定
  • MySQL 锁学习笔记
  • 计算机网络-自顶向下—第二章应用层-重点复习笔记
  • 在C++中的封装(Encapsulation)
  • Linux学习笔记:PCIe内核篇(1):初始化与枚举流程
  • 第1章 C# 和 .NET 框架 笔记
  • MCP简介和应用
  • 第十七章 Linux之大数据定制篇——Shell编程
  • ES知识合集(四):高级篇
  • 20250614让NanoPi NEO core开发板在Ubuntu core16.04系统下使用耳机播音测试
  • 「Linux文件及目录管理」目录结构及显示类命令
  • Python虚拟环境的使用
  • SpringBoot源码解析(十一):条件注解@ConditionalOnClass的匹配逻辑
  • 如何调优Kafka
  • LeetCode 第71题 简化路径(繁琐)
  • thinkphp8提升之查询
  • Nature Machine Intelligence 北京通研院朱松纯团队开发视触觉传感仿人灵巧手,实现类人自适应抓取