如何監控Java線程池運行狀態?

王潮濤


如果想監控一個線程池的執行狀態,線程池執行類ThreadPoolExecutor給出了相關的 API, 能實時獲取線程池的以下信息:

  • 當前活動線程數

  • 正在排隊中的線程數

  • 已經執行完成的線程數

  • 總線程數

  • ……

總線程數 = 排隊線程數 + 活動線程數 + 執行完成的線程數

1. 代碼示例

創建ThreadPoolExecutor實例:

通過ThreadPoolExecutor的API來獲取線程運行信息:

2. 代碼運行分析

線程池提交了 100000 個任務,但同時只有 50 個線程在工作,我們每間隔 3 秒來獲取當前線程池的運行狀態。

2.1 第一次程序輸出

  • 當前排隊線程數:99950

  • 當前活動線程數:50

  • 執行完成線程數:0

  • 總線程數(排隊線程數 + 活動線程數 + 執行完成線程數):100000

2.2 第二次程序輸出

  • 當前排隊線程數:99800

  • 當前活動線程數:50

  • 執行完成線程數:150

  • 總線程數(排隊線程數 + 活動線程數 + 執行完成線程數):100000

2.3 最後輸出

  • 當前排隊線程數:0

  • 當前活動線程數:0

  • 執行完成線程數:100000

  • 總線程數(排隊線程數 + 活動線程數 + 執行完成線程數):100000


因此,瞭解清楚這些 API 的使用方法後,我們想監控線程池的狀態就非常方便了。

歡迎關注筆者,持續分享有價值的優質架構文章。


架構師成長錄


jstack就可以吧,java自帶工具有監控


分享到:


相關文章: