亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Java手動配置線程池過程詳解

瀏覽:64日期:2022-09-01 18:31:57

線程池中,常見有涉及到的:

ExecutorService executorService = Executors.newSingleThreadExecutor();ExecutorService executorService1 = Executors.newCachedThreadPool();ExecutorService executorService2 = Executors.newFixedThreadPool(3);

關于Executors和ExecutorService從記憶上類似于Collections和List。

但是以上幾種其實不建議使用。最好可以通過自己手動配置ThreadPoolExecutor的形式。

我先創建一個demo:

ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2,5,1L,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(3),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy() );

涉及7個參數,按順序分別是

int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler

具體我首先需要結合參數解釋下線程池的執行原理:

畫了張圖:

Java手動配置線程池過程詳解

如果我用銀行辦理業務示例說明如下:

1、首先銀行里面有兩個柜臺,這就是核心線程數(7大參數之一)。

2、然后隨著客戶的增加,可能這個兩個柜臺滿了,然后就要請用戶到等候區里面進行等待。這個等候區就是相當于阻塞隊列(七大參數之一)。

3、然后緊接著客戶越來越多,連阻塞隊列都撐不住了,這個時候,就要請求,上面的領導進行多增加柜臺的操作,這個時候,可能加了三個柜臺,現在就有5個柜臺了。這個時候最大的線程數(七大參數之一)就是5了。

4、但是這個時候可能客戶又越來越多,這個時候新加的柜臺也受不了,就要開始有拒絕策略了(七大參數之一)

5、然后過了一段時間,慢慢的,客戶越來越少了,這個時候,發現漸漸的,柜臺空余出來了。KeepAliveTime(七大參數之一,加上單位,合計兩個參數)指當線程數大于核心線程數時,此為終止前多余的空閑線程等待新任務的最長時間。

6、還有一個參數是工廠,這個我們不做深入研究,直接用默認的工廠即可。

懂得原理以后,我們可以查看下,為什么最好不要直接用,比如:

Executors.newFixedThreadPool(3);

這個的主要原因就是這里面默認隊列的最大值是Integer的最大值。

Java手動配置線程池過程詳解

Java手動配置線程池過程詳解

所以我們生產中需要自己配置線程池。因為默認隊列的長度太長了,有可能會導致oom。就是內存炸掉了。

這個在阿里的編程思想里面也有說明這一點:

Java手動配置線程池過程詳解

這邊我們探討下,拒絕策略。4種策略。就是所有柜臺和等候區全部滿了。會如何處理。

用非常easy的代碼來過下,這塊的內容:

1、AbortPolicy

import java.util.concurrent.*;public class VolatileTest { public static void main(String[] args) throws Exception { ExecutorService executorService = new ThreadPoolExecutor(2,5,1L,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(3),Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy() ); try { for (int i = 0; i < 9; i++) {executorService.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()+'t'+'辦理業務'); }}); } } catch (Exception e) { e.printStackTrace(); } finally { } }}

Java手動配置線程池過程詳解

可以看到如果超出的話直接掛了,阻止正常運行。

2、CallerRunsPolicy

輸出

Java手動配置線程池過程詳解

發現有一個退回main線程,被main線程處理。即會把任務退回至調用者。

3、DiscardOldestPolicy

這個將會等待時間最久的任務丟掉。

4、DiscardPolicy

多出來的任務會全部丟掉。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 国产大片91精品免费观看不卡 | 草草网| 嗯!啊!使劲用力在线观看 | 在线观看中文字幕2021 | 国产精品揄拍100视频最近 | 国产永久在线 | 亚洲成在人线影视天堂网 | 青青操青青操 | 老妇综合久久香蕉蜜桃 | 大杳蕉精品视频在线观看 | 国产高清网站 | 国产精品免费小视频 | 91久久婷婷国产综合精品青草 | 国产综合第一页在线视频 | 久久久久久久网站 | 男女生性毛片免费观看 | 欧美一级大黄特黄毛片视频 | 欧美日本一道道一区二区三 | 国产二区精品视频 | 美女黄色在线观看 | 乱爱性全过程免费视频 | 日美一级毛片 | 欧美综合视频在线 | 成人午夜影院在线观看 | 亚洲综合久久一本伊伊区 | 日本a毛片| 欧美成年黄网站色高清视频 | 亚洲国产精品综合欧美 | 亚洲精品人人 | 欧美综合亚洲 | 日本人一级毛片视频 | 香蕉视频免费在线看 | 国产九九精品 | 国产露脸150部国语对白 | 真实国产乱子伦精品一区二区三区 | 国产亚洲精品美女一区二区 | 一级做a爱过程免费视频麻豆 | 天天做天天爱天天影视综合 | 色吧dvd| 在线播放国产色视频在线 | 日韩美女专区中文字幕 |