乾貨:教你如何監控 Java 執行緒池執行狀態
之前寫過一篇 Java 執行緒池的使用介紹文章《執行緒池全面解析》,全面介紹了什麼是執行緒池、執行緒池核心類、執行緒池工作流程、執行緒池分類、拒絕策略、及如何提交與關閉執行緒池等。
但在實際開發過程中,線上程池使用過程中可能會遇到各方面的故障,如執行緒池阻塞,無法提交新任務等。
如果你想監控某一個執行緒池的執行狀態,執行緒池執行類 ThreadPoolExecutor
也給出了相關的 API, 能實時獲取執行緒池的當前活動執行緒數、正在排隊中的執行緒數、已經執行完成的執行緒數、匯流排程數等。
匯流排程數 = 排隊執行緒數 + 活動執行緒數 + 執行完成的執行緒數。
下面給出一個執行緒池使用示例,及教你獲取執行緒池狀態。
private static ExecutorService es = new ThreadPoolExecutor(50, 100, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(100000));
public static void main(String[] args) throws Exception {
for (int i = 0; i < 100000; i++) {
es.execute(() -> {
System.out.print(1);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
ThreadPoolExecutor tpe = ((ThreadPoolExecutor) es);
while (true) {
System.out.println();
int queueSize = tpe.getQueue().size();
System.out.println("當前排隊執行緒數:" + queueSize);
int activeCount = tpe.getActiveCount();
System.out.println("當前活動執行緒數:" + activeCount);
long completedTaskCount = tpe.getCompletedTaskCount();
System.out.println("執行完成執行緒數:" + completedTaskCount);
long taskCount = tpe.getTaskCount();
System.out.println("匯流排程數:" + taskCount);
Thread.sleep(3000);
}
}
執行緒池提交了 100000 個任務,但同時只有 50 個執行緒在執行工作,我們每陋 3 秒來獲取當前執行緒池的執行狀態。
第一次程式輸出:
當前排隊執行緒數:99950
當前活動執行緒數:50
執行完成執行緒數:0
匯流排程數(排隊執行緒數 + 活動執行緒數 + 執行完成執行緒數):100000
第二次程式輸出:
當前排隊執行緒數:99800
當前活動執行緒數:50
執行完成執行緒數:150
匯流排程數(排隊執行緒數 + 活動執行緒數 + 執行完成執行緒數):100000
活動執行緒數和匯流排程數是不變的,排隊中的執行緒數和執行完成的執行緒數不斷在變化,直到所有任務執行完畢,最後輸出:
當前排隊執行緒數:0
當前活動執行緒數:0
執行完成執行緒數:100000
匯流排程數(排隊執行緒數 + 活動執行緒數 + 執行完成執行緒數):100000
這樣,你瞭解了這些 API 的使用方法,你想監控執行緒池的狀態就非常方便了。
掃描關注我們的微信公眾號,乾貨每天更新。
相關文章
- 執行緒池監控2-監控執行緒池狀態、執行緒數量和佇列任務數量等執行緒佇列
- Java利用執行緒工廠監控執行緒池Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- 詳解Java執行緒池的ctl(執行緒池控制狀態)【原始碼分析】Java執行緒原始碼
- ThreadPollExcutor執行緒池的狀態thread執行緒
- Java執行緒池二:執行緒池原理Java執行緒
- Docker 之 執行狀態監控Docker
- MySQL MHA 執行狀態監控MySql
- Java執行緒的狀態Java執行緒
- Java Profilers 可以用來監控執行緒池嗎Java執行緒
- java多執行緒9:執行緒池Java執行緒
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- 編碼:執行緒執行監控執行緒
- JavaSE_多執行緒入門 執行緒安全 死鎖 狀態 通訊 執行緒池Java執行緒
- 利用superlance監控supervisor執行狀態
- 執行緒狀態執行緒
- Java執行緒狀態轉換Java執行緒
- java 執行緒池Java執行緒
- Java執行緒池Java執行緒
- java執行緒池趣味事:這不是執行緒池Java執行緒
- 【Java】【多執行緒】執行緒池簡述Java執行緒
- Java執行緒池一:執行緒基礎Java執行緒
- Java多執行緒-執行緒池的使用Java執行緒
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- 詳解執行緒池的作用及Java中如何使用執行緒池執行緒Java
- 【Java】執行緒的 6 種狀態Java執行緒
- Java執行緒狀態及切換Java執行緒
- Java 執行緒的5種狀態Java執行緒
- java執行緒的狀態+鎖分析Java執行緒
- Java執行緒狀態及同步鎖Java執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- 搞懂Java執行緒池Java執行緒
- 執行緒和執行緒池執行緒
- 執行緒 執行緒池 Task執行緒
- 多執行緒【執行緒池】執行緒
- SpringBoot執行緒池和Java執行緒池的實現原理Spring Boot執行緒Java
- Java 併發:執行緒、執行緒池和執行器全面教程Java執行緒
- Java中命名執行器服務執行緒和執行緒池Java執行緒