最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java線程池使用后到底要關(guān)閉嗎

 更新時(shí)間:2019年01月10日 10:34:05   作者:煩囂的人  
這篇文章主要給大家介紹了關(guān)于java線程池使用后到底要不要關(guān)閉的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

線程池做什么

網(wǎng)絡(luò)請(qǐng)求通常有兩種形式:

第一種,請(qǐng)求不是很頻繁,而且每次連接后會(huì)保持相當(dāng)一段時(shí)間來(lái)讀數(shù)據(jù)或者寫數(shù)據(jù),最后斷開(kāi),如文件下載,網(wǎng)絡(luò)流媒體等。

另一種形式是請(qǐng)求頻繁,但是連接上以后讀/寫很少量的數(shù)據(jù)就斷開(kāi)連接??紤]到服務(wù)的并發(fā)問(wèn)題,如果每個(gè)請(qǐng)求來(lái)到以后服務(wù)都為它啟動(dòng)一個(gè)線程,那么這對(duì)服務(wù)的資源可能會(huì)造成很大的浪費(fèi),特別是第二種情況。

因?yàn)橥ǔG闆r下,創(chuàng)建線程是需要一定的耗時(shí)的,設(shè)這個(gè)時(shí)間為T1,而連接后讀/寫服務(wù)的時(shí)間為T2,當(dāng)T1>>T2時(shí),我們就應(yīng)當(dāng)考慮一種策略或者機(jī)制來(lái)控制,使得服務(wù)對(duì)于第二種請(qǐng)求方式也能在較低的功耗下完成。

通常,我們可以用線程池來(lái)解決這個(gè)問(wèn)題,首先,在服務(wù)啟動(dòng)的時(shí)候,我們可以啟動(dòng)好幾個(gè)線程,并用一個(gè)容器(如線程池)來(lái)管理這些線程。

當(dāng)請(qǐng)求到來(lái)時(shí),可以從池中取一個(gè)線程出來(lái),執(zhí)行任務(wù)(通常是對(duì)請(qǐng)求的響應(yīng)),當(dāng)任務(wù)結(jié)束后,再將這個(gè)線程放入池中備用;

如果請(qǐng)求到來(lái)而池中沒(méi)有空閑的線程,該請(qǐng)求需要排隊(duì)等候。最后,當(dāng)服務(wù)關(guān)閉時(shí)銷毀該池即可。

然而最近在開(kāi)發(fā)中用到了java的線程池,然后就很疑惑這個(gè)線程池到底要不要手動(dòng)關(guān)閉,感覺(jué)是要關(guān)閉的,但是沒(méi)人強(qiáng)調(diào)線程池用完要關(guān)閉。so今天來(lái)試驗(yàn)下到底線程池用完要不要關(guān)閉。

直接上實(shí)驗(yàn)代碼

public static void main(String[] args) throws Exception {
  //用于獲取到本java進(jìn)程,進(jìn)而獲取總線程數(shù)
 RuntimeMXBean runtimeBean = ManagementFactory.getRuntimeMXBean();
 String jvmName = runtimeBean.getName();
 System.out.println("JVM Name = " + jvmName);
 long pid = Long.valueOf(jvmName.split("@")[0]);
 System.out.println("JVM PID = " + pid);
 ThreadMXBean bean = ManagementFactory.getThreadMXBean();
 int n = 30000;
 for (int i = 0; i < n; i++) {
  ThreadPoolExecutor executor = new ThreadPoolExecutor(10,20,1000,TimeUnit.SECONDS,new LinkedBlockingDeque<>());
  for(int j=0;j<10;j++){
   executor.execute(()->{
    System.out.println("當(dāng)前線程總數(shù)為:"+bean.getThreadCount());
   });
  }
 }
 Thread.sleep(10000);
 System.out.println("線程總數(shù)為 = " + bean.getThreadCount());
}

簡(jiǎn)單來(lái)說(shuō)就是在一個(gè) for 循環(huán)中創(chuàng)建線程池,然后執(zhí)行一個(gè)打印任務(wù)(不執(zhí)行任務(wù)線程不會(huì)真正創(chuàng)建),打印出當(dāng)前 java 進(jìn)程的總線程數(shù),下面是打印部分結(jié)果:

線程

可以看到在創(chuàng)建到 15 萬(wàn)個(gè)線程是爆內(nèi)存,內(nèi)存占用百分百后 java 應(yīng)用崩潰。說(shuō)明線程未被回收。

PS:內(nèi)存占用百分百后,部分應(yīng)用開(kāi)始出現(xiàn)異常,界面花屏,閃屏,不能正常繪制gui,不知道為啥,即使后面內(nèi)存占用降下來(lái)也一樣,只能重啟應(yīng)用。

結(jié)論

使用完線程池一定記得回收,否則跑著跑著就內(nèi)存爆炸崩潰。回收函數(shù)如下:

//執(zhí)行此函數(shù)后線程池不再接收新任務(wù),并等待所有任務(wù)執(zhí)行完畢后銷毀線程。此函數(shù)不會(huì)等待銷毀完畢
executor.shutdown();
//立即結(jié)束所有線程,不管是否正在運(yùn)行,返回未執(zhí)行完畢的任務(wù)列表
executor.shutdownNow();

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • java.time包時(shí)間類的具體使用

    java.time包時(shí)間類的具體使用

    本文主要介紹了java.time包時(shí)間類的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 詳解Java目錄操作與文件操作教程

    詳解Java目錄操作與文件操作教程

    本章具體介紹了目錄操作、文件操作的基本使用方法和常用函數(shù),圖解穿插代碼實(shí)現(xiàn),感興趣的朋友來(lái)看看吧
    2022-03-03
  • springboot3.x版本集成log4j沖突以及解決log4j沖突不生效問(wèn)題

    springboot3.x版本集成log4j沖突以及解決log4j沖突不生效問(wèn)題

    由于Spring Boot自帶的Logback與Log4j沖突,去除了Logback的jar包后仍存在,原因是其他包也引入了Logback,解決方法是找到并去除引入Logback的其他包,如actuator包,并更新Maven
    2024-11-11
  • Java之打印String對(duì)象的地址

    Java之打印String對(duì)象的地址

    這篇文章主要介紹了Java之打印String對(duì)象的地址,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java判斷List中有無(wú)重復(fù)元素的方法

    Java判斷List中有無(wú)重復(fù)元素的方法

    今天小編就為大家分享一篇Java判斷List中有無(wú)重復(fù)元素的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Java快速實(shí)現(xiàn)PDF轉(zhuǎn)圖片功能實(shí)例代碼

    Java快速實(shí)現(xiàn)PDF轉(zhuǎn)圖片功能實(shí)例代碼

    PDFBox是一個(gè)開(kāi)源Java類庫(kù),用于讀取和創(chuàng)建PDF文檔,它支持文本提取、表單處理、文檔加密解密、合并分割、內(nèi)容覆蓋追加、文檔打印和轉(zhuǎn)換等功能,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • Nacos簡(jiǎn)介最新收藏版

    Nacos簡(jiǎn)介最新收藏版

    Nacos?是阿里巴巴推出來(lái)的一個(gè)新開(kāi)源項(xiàng)目,這是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái),Nacos?幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺(tái),對(duì)Nacos相關(guān)基本知識(shí)感興趣的朋友一起看看吧
    2023-08-08
  • SpringBoot接入輕量級(jí)分布式日志框架(GrayLog)的操作方法

    SpringBoot接入輕量級(jí)分布式日志框架(GrayLog)的操作方法

    這篇文章主要介紹了SpringBoot接入輕量級(jí)分布式日志框架(GrayLog)的方法,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • SpringBoot自定義注解之實(shí)現(xiàn)AOP切面日志詳解

    SpringBoot自定義注解之實(shí)現(xiàn)AOP切面日志詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot自定義注解之實(shí)現(xiàn)AOP切面統(tǒng)一打印出入?yún)⑷罩?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java多線程實(shí)現(xiàn)同時(shí)輸出

    Java多線程實(shí)現(xiàn)同時(shí)輸出

    這篇文章主要介紹了Java多線程實(shí)現(xiàn)同時(shí)打印的相關(guān)資料,需要的朋友可以參考下
    2016-03-03

最新評(píng)論

罗甸县| 乡宁县| 汶川县| 伊金霍洛旗| 安阳县| 修水县| 洪洞县| 鄂伦春自治旗| 孝感市| 涞源县| 凉山| 公安县| 娱乐| 漠河县| 彩票| 昌吉市| 元氏县| 昌宁县| 阿克苏市| 九龙城区| 大洼县| 辰溪县| 晋中市| 吐鲁番市| 玛多县| 宜宾县| 密山市| 平罗县| 乐业县| 和平县| 寻乌县| 隆林| 高雄市| 靖西县| 东明县| 临安市| 河间市| 博罗县| 内黄县| 桐柏县| 抚顺县|