欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

線程池做什么

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

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

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

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

通常,我們可以用線程池來解決這個問題,首先,在服務(wù)啟動的時候,我們可以啟動好幾個線程,并用一個容器(如線程池)來管理這些線程。

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

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

然而最近在開發(fā)中用到了java的線程池,然后就很疑惑這個線程池到底要不要手動關(guān)閉,感覺是要關(guān)閉的,但是沒人強(qiáng)調(diào)線程池用完要關(guān)閉。so今天來試驗下到底線程池用完要不要關(guā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());
}

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

線程

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

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

結(jié)論

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

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

總結(jié)

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

相關(guān)文章

  • Java創(chuàng)建對象的六種常用方式總結(jié)

    Java創(chuàng)建對象的六種常用方式總結(jié)

    作為Java開發(fā)者,經(jīng)常創(chuàng)建很多對象,你是否知道Java中創(chuàng)建對象有哪些方式呢?下面這篇文章主要給大家介紹了關(guān)于Java創(chuàng)建對象的六種常用方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • 詳解如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API

    詳解如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API

    作為后端程序員,我們的日常工作就是調(diào)用一些第三方服務(wù),將數(shù)據(jù)存入數(shù)據(jù)庫,返回信息給前端。本文為大家介紹了如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API,需要的可以參考一下
    2022-12-12
  • Java 中的偽共享詳解及解決方案

    Java 中的偽共享詳解及解決方案

    這篇文章主要介紹了Java 中的偽共享詳解及解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • SpringBoot中自定義首頁(默認(rèn)頁)及favicon的方法

    SpringBoot中自定義首頁(默認(rèn)頁)及favicon的方法

    這篇文章主要介紹了SpringBoot中如何自定義首頁(默認(rèn)頁)及favicon,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • java微信開發(fā)第二步 獲取消息和回復(fù)消息

    java微信開發(fā)第二步 獲取消息和回復(fù)消息

    這篇文章主要為大家分享java微信開發(fā)的第二步,如何獲取消息和回復(fù)消息,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 對spring task和線程池的深入研究

    對spring task和線程池的深入研究

    這篇文章主要介紹了對spring task和線程池的深入研究,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解java中import的作用

    詳解java中import的作用

    這篇文章主要介紹了java中import作用,import與package機(jī)制相關(guān),這里先從package入手,再講述import以及static import的作用。
    2021-04-04
  • SpringBoot整合支付寶APP支付

    SpringBoot整合支付寶APP支付

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合支付寶APP支付,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Feign接口方法返回值設(shè)置方式

    Feign接口方法返回值設(shè)置方式

    這篇文章主要介紹了Feign接口方法返回值設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • MyBatis多對多一對多關(guān)系查詢嵌套處理

    MyBatis多對多一對多關(guān)系查詢嵌套處理

    這篇文章主要為大家介紹了MyBatis多對多一對多關(guān)系查詢嵌套處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10

最新評論