如何监控java线程池运行状态

如果想监控一个线程池的执行状态,线程池执行类ThreadPoolExecutor给出了相关的 API, 能实时获取线程池的以下信息:

  • 当前活动线程数
  • 正在排队中的线程数
  • 已经执行完成的线程数
  • 总线程数
  • 【如何监控java线程池运行状态】
    ……
总线程数 = 排队线程数 + 活动线程数 + 执行完成的线程数
1. 代码示例
创建ThreadPoolExecutor实例:
如何监控java线程池运行状态

通过ThreadPoolExecutor的API来获取线程运行信息:
如何监控java线程池运行状态

2. 代码运行分析
线程池提交了 100000 个任务 , 但同时只有 50 个线程在工作,我们每间隔 3 秒来获取当前线程池的运行状态 。
2.1 第一次程序输出
  • 当前排队线程数:99950
  • 当前活动线程数:50
  • 执行完成线程数:0
  • 总线程数(排队线程数 + 活动线程数 + 执行完成线程数):100000
2.2 第二次程序输出
  • 当前排队线程数:99800
  • 当前活动线程数:50
  • 执行完成线程数:150
  • 总线程数(排队线程数 + 活动线程数 + 执行完成线程数):100000
2.3 最后输出
  • 当前排队线程数:0
  • 当前活动线程数:0
  • 执行完成线程数:100000
  • 总线程数(排队线程数 + 活动线程数 + 执行完成线程数):100000
因此,了解清楚这些 API 的使用方法后 , 我们想监控线程池的状态就非常方便了 。
如何监控java线程池运行状态

经验总结扩展阅读