摘要:但在實(shí)際開(kāi)發(fā)過(guò)程中,在線程池使用過(guò)程中可能會(huì)遇到各方面的故障,如線程池阻塞,無(wú)法提交新任務(wù)等。如果你想監(jiān)控某一個(gè)線程池的執(zhí)行狀態(tài),線程池執(zhí)行類也給出了相關(guān)的能實(shí)時(shí)獲取線程池的當(dāng)前活動(dòng)線程數(shù)正在排隊(duì)中的線程數(shù)已經(jīng)執(zhí)行完成的線程數(shù)總線程數(shù)等。
之前寫過(guò)一篇 Java 線程池的使用介紹文章《線程池全面解析》,全面介紹了什么是線程池、線程池核心類、線程池工作流程、線程池分類、拒絕策略、及如何提交與關(guān)閉線程池等。
但在實(shí)際開(kāi)發(fā)過(guò)程中,在線程池使用過(guò)程中可能會(huì)遇到各方面的故障,如線程池阻塞,無(wú)法提交新任務(wù)等。
如果你想監(jiān)控某一個(gè)線程池的執(zhí)行狀態(tài),線程池執(zhí)行類 ThreadPoolExecutor 也給出了相關(guān)的 API, 能實(shí)時(shí)獲取線程池的當(dāng)前活動(dòng)線程數(shù)、正在排隊(duì)中的線程數(shù)、已經(jīng)執(zhí)行完成的線程數(shù)、總線程數(shù)等。
總線程數(shù) = 排隊(duì)線程數(shù) + 活動(dòng)線程數(shù) + 執(zhí)行完成的線程數(shù)。
下面給出一個(gè)線程池使用示例,及教你獲取線程池狀態(tài)。
private static ExecutorService es = new ThreadPoolExecutor(50, 100, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(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("當(dāng)前排隊(duì)線程數(shù):" + queueSize); int activeCount = tpe.getActiveCount(); System.out.println("當(dāng)前活動(dòng)線程數(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 個(gè)任務(wù),但同時(shí)只有 50 個(gè)線程在執(zhí)行工作,我們每陋 3 秒來(lái)獲取當(dāng)前線程池的運(yùn)行狀態(tài)。
第一次程序輸出:
當(dāng)前排隊(duì)線程數(shù):99950 當(dāng)前活動(dòng)線程數(shù):50 執(zhí)行完成線程數(shù):0 總線程數(shù)(排隊(duì)線程數(shù) + 活動(dòng)線程數(shù) + 執(zhí)行完成線程數(shù)):100000
第二次程序輸出:
當(dāng)前排隊(duì)線程數(shù):99800 當(dāng)前活動(dòng)線程數(shù):50 執(zhí)行完成線程數(shù):150 總線程數(shù)(排隊(duì)線程數(shù) + 活動(dòng)線程數(shù) + 執(zhí)行完成線程數(shù)):100000
活動(dòng)線程數(shù)和總線程數(shù)是不變的,排隊(duì)中的線程數(shù)和執(zhí)行完成的線程數(shù)不斷在變化,直到所有任務(wù)執(zhí)行完畢,最后輸出:
當(dāng)前排隊(duì)線程數(shù):0 當(dāng)前活動(dòng)線程數(shù):0 執(zhí)行完成線程數(shù):100000 總線程數(shù)(排隊(duì)線程數(shù) + 活動(dòng)線程數(shù) + 執(zhí)行完成線程數(shù)):100000
這樣,你了解了這些 API 的使用方法,你想監(jiān)控線程池的狀態(tài)就非常方便了。
推薦:Spring Boot & Cloud 最強(qiáng)技術(shù)教程
掃描關(guān)注我們的微信公眾號(hào),干貨每天更新。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71278.html
摘要:結(jié)構(gòu)型模式適配器模式橋接模式裝飾模式組合模式外觀模式享元模式代理模式。行為型模式模版方法模式命令模式迭代器模式觀察者模式中介者模式備忘錄模式解釋器模式模式狀態(tài)模式策略模式職責(zé)鏈模式責(zé)任鏈模式訪問(wèn)者模式。 主要版本 更新時(shí)間 備注 v1.0 2015-08-01 首次發(fā)布 v1.1 2018-03-12 增加新技術(shù)知識(shí)、完善知識(shí)體系 v2.0 2019-02-19 結(jié)構(gòu)...
摘要:中的線程池運(yùn)用場(chǎng)景非常廣泛,幾乎所有的一步或者并發(fā)執(zhí)行程序都可以使用。代碼中如果執(zhí)行了方法,線程池會(huì)提前創(chuàng)建并啟動(dòng)所有核心線程。線程池最大數(shù)量線程池允許創(chuàng)建的線程最大數(shù)量。被稱為是可重用固定線程數(shù)的線程池。 Java中的線程池運(yùn)用場(chǎng)景非常廣泛,幾乎所有的一步或者并發(fā)執(zhí)行程序都可以使用。那么線程池有什么好處呢,以及他的實(shí)現(xiàn)原理是怎么樣的呢? 使用線程池的好處 在開(kāi)發(fā)過(guò)程中,合理的使用線程...
摘要:一個(gè)是線程退出條件,一個(gè)是異常處理情況。很方便,每個(gè)線程一份數(shù)據(jù),也很安全,但要注意內(nèi)存泄露。線程池參數(shù)包最常用的就是線程池,平常工作建議直接使用線程池,類就可以降低優(yōu)先級(jí)了。在線程池的構(gòu)造參數(shù)中,我們使用的隊(duì)列,一定要注意其特性和邊界。 我曾經(jīng)對(duì)自己的小弟說(shuō),如果你實(shí)在搞不清楚什么時(shí)候用HashMap,什么時(shí)候用ConcurrentHashMap,那么就用后者,你的代碼bug會(huì)很少。...
摘要:線程池的作用降低資源消耗。通過(guò)重復(fù)利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的資源浪費(fèi)。而高位的部分,位表示線程池的狀態(tài)。當(dāng)線程池中的線程數(shù)達(dá)到后,就會(huì)把到達(dá)的任務(wù)放到中去線程池的最大長(zhǎng)度。默認(rèn)情況下,只有當(dāng)線程池中的線程數(shù)大于時(shí),才起作用。 線程池的作用 降低資源消耗。通過(guò)重復(fù)利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的資源浪費(fèi)。 提高響應(yīng)速度。當(dāng)任務(wù)到達(dá)時(shí),不需要等到線程創(chuàng)建就能立即執(zhí)行...
摘要:用于限定中線程數(shù)的最大值。該線程池中的任務(wù)隊(duì)列維護(hù)著等待執(zhí)行的對(duì)象。線程池和消息隊(duì)列筆者在實(shí)際工程應(yīng)用中,使用過(guò)多線程和消息隊(duì)列處理過(guò)異步任務(wù)。以上是筆者在學(xué)習(xí)實(shí)踐之后對(duì)于多線程和消息隊(duì)列的粗淺認(rèn)識(shí),初學(xué)者切莫混淆兩者的作用。 多線程編程很難,難點(diǎn)在于多線程代碼的執(zhí)行不是按照我們直覺(jué)上的執(zhí)行順序。所以多線程編程必須要建立起一個(gè)宏觀的認(rèn)識(shí)。 線程池是多線程編程中的一個(gè)重要概念。為了能夠更...
閱讀 1694·2021-10-13 09:39
閱讀 3166·2021-10-12 10:11
閱讀 558·2021-09-28 09:36
閱讀 2642·2019-08-30 15:55
閱讀 1392·2019-08-30 13:04
閱讀 635·2019-08-29 17:08
閱讀 1915·2019-08-29 14:14
閱讀 3415·2019-08-28 18:23