日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

教你如何监控 Java 线程池运行状态

發(fā)布時間:2023/12/3 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 教你如何监控 Java 线程池运行状态 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉載自?干貨 | 教你如何監(jiān)控 Java 線程池運行狀態(tài)

之前寫過一篇 Java 線程池的使用介紹文章《線程池全面解析》,全面介紹了什么是線程池、線程池核心類、線程池工作流程、線程池分類、拒絕策略、及如何提交與關閉線程池等。

但在實際開發(fā)過程中,在線程池使用過程中可能會遇到各方面的故障,如線程池阻塞,無法提交新任務等。

如果你想監(jiān)控某一個線程池的執(zhí)行狀態(tài),線程池執(zhí)行類 ThreadPoolExecutor 也給出了相關的 API, 能實時獲取線程池的當前活動線程數(shù)、正在排隊中的線程數(shù)、已經執(zhí)行完成的線程數(shù)、總線程數(shù)等。

總線程數(shù) = 排隊線程數(shù) + 活動線程數(shù) + 執(zhí)行完成的線程數(shù)。

下面給出一個線程池使用示例,及教你獲取線程池狀態(tài)。

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("當前排隊線程數(shù):" + queueSize);int activeCount = tpe.getActiveCount();System.out.println("當前活動線程數(shù):" + activeCount);long completedTaskCount = tpe.getCompletedTaskCount();System.out.println("執(zhí)行完成線程數(shù):" + completedTaskCount);long taskCount = tpe.getTaskCount();System.out.println("總線程數(shù):" + taskCount);Thread.sleep(3000);}}

線程池提交了 100000 個任務,但同時只有 50 個線程在執(zhí)行工作,我們每陋 3 秒來獲取當前線程池的運行狀態(tài)。

第一次程序輸出:

當前排隊線程數(shù): 99950當前活動線程數(shù): 50執(zhí)行完成線程數(shù): 0總線程數(shù)(排隊線程數(shù) + 活動線程數(shù) + 執(zhí)行完成線程數(shù)): 100000

第二次程序輸出:

當前排隊線程數(shù): 99800當前活動線程數(shù): 50執(zhí)行完成線程數(shù): 150總線程數(shù)(排隊線程數(shù) + 活動線程數(shù) + 執(zhí)行完成線程數(shù)): 100000

活動線程數(shù)和總線程數(shù)是不變的,排隊中的線程數(shù)和執(zhí)行完成的線程數(shù)不斷在變化,直到所有任務執(zhí)行完畢,最后輸出:

當前排隊線程數(shù): 0當前活動線程數(shù): 0執(zhí)行完成線程數(shù): 100000總線程數(shù)(排隊線程數(shù) + 活動線程數(shù) + 執(zhí)行完成線程數(shù)): 100000

這樣,你了解了這些 API 的使用方法,你想監(jiān)控線程池的狀態(tài)就非常方便了。


總結

以上是生活随笔為你收集整理的教你如何监控 Java 线程池运行状态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。