如果想監控一個線程池的執行狀態,線程池執行類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 的使用方法后,我們想監控線程池的狀態就非常方便了。
筆者,持續分享有價值的優質架構文章。
上一篇如何用代碼刷屏?