国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java手動(dòng)配置線程池過(guò)程詳解

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

線程池中,常見(jiàn)有涉及到的:

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

關(guān)于Executors和ExecutorService從記憶上類(lèi)似于Collections和List。

但是以上幾種其實(shí)不建議使用。最好可以通過(guò)自己手動(dòng)配置ThreadPoolExecutor的形式。

我先創(chuàng)建一個(gè)demo:

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

涉及7個(gè)參數(shù),按順序分別是

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

具體我首先需要結(jié)合參數(shù)解釋下線程池的執(zhí)行原理:

畫(huà)了張圖:

Java手動(dòng)配置線程池過(guò)程詳解

如果我用銀行辦理業(yè)務(wù)示例說(shuō)明如下:

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

2、然后隨著客戶的增加,可能這個(gè)兩個(gè)柜臺(tái)滿了,然后就要請(qǐng)用戶到等候區(qū)里面進(jìn)行等待。這個(gè)等候區(qū)就是相當(dāng)于阻塞隊(duì)列(七大參數(shù)之一)。

3、然后緊接著客戶越來(lái)越多,連阻塞隊(duì)列都撐不住了,這個(gè)時(shí)候,就要請(qǐng)求,上面的領(lǐng)導(dǎo)進(jìn)行多增加柜臺(tái)的操作,這個(gè)時(shí)候,可能加了三個(gè)柜臺(tái),現(xiàn)在就有5個(gè)柜臺(tái)了。這個(gè)時(shí)候最大的線程數(shù)(七大參數(shù)之一)就是5了。

4、但是這個(gè)時(shí)候可能客戶又越來(lái)越多,這個(gè)時(shí)候新加的柜臺(tái)也受不了,就要開(kāi)始有拒絕策略了(七大參數(shù)之一)

5、然后過(guò)了一段時(shí)間,慢慢的,客戶越來(lái)越少了,這個(gè)時(shí)候,發(fā)現(xiàn)漸漸的,柜臺(tái)空余出來(lái)了。KeepAliveTime(七大參數(shù)之一,加上單位,合計(jì)兩個(gè)參數(shù))指當(dāng)線程數(shù)大于核心線程數(shù)時(shí),此為終止前多余的空閑線程等待新任務(wù)的最長(zhǎng)時(shí)間。

6、還有一個(gè)參數(shù)是工廠,這個(gè)我們不做深入研究,直接用默認(rèn)的工廠即可。

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

Executors.newFixedThreadPool(3);

這個(gè)的主要原因就是這里面默認(rèn)隊(duì)列的最大值是Integer的最大值。

Java手動(dòng)配置線程池過(guò)程詳解

Java手動(dòng)配置線程池過(guò)程詳解

所以我們生產(chǎn)中需要自己配置線程池。因?yàn)槟J(rèn)隊(duì)列的長(zhǎng)度太長(zhǎng)了,有可能會(huì)導(dǎo)致oom。就是內(nèi)存炸掉了。

這個(gè)在阿里的編程思想里面也有說(shuō)明這一點(diǎn):

Java手動(dòng)配置線程池過(guò)程詳解

這邊我們探討下,拒絕策略。4種策略。就是所有柜臺(tái)和等候區(qū)全部滿了。會(huì)如何處理。

用非常easy的代碼來(lái)過(guò)下,這塊的內(nèi)容:

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'+'辦理業(yè)務(wù)'); }}); } } catch (Exception e) { e.printStackTrace(); } finally { } }}

Java手動(dòng)配置線程池過(guò)程詳解

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

2、CallerRunsPolicy

輸出

Java手動(dòng)配置線程池過(guò)程詳解

發(fā)現(xiàn)有一個(gè)退回main線程,被main線程處理。即會(huì)把任務(wù)退回至調(diào)用者。

3、DiscardOldestPolicy

這個(gè)將會(huì)等待時(shí)間最久的任務(wù)丟掉。

4、DiscardPolicy

多出來(lái)的任務(wù)會(huì)全部丟掉。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 久久精品a一国产成人免费网站 | 九九99久久 | 久草福利资源网站免费 | 久草视频网址 | 欧美成人免费高清二区三区 | 日本人一级毛片免费视频 | 国产成人免费 | 国产后式a一视频 | 久久综合色88 | 欧美怡红院在线 | 亚州成人| 国产一级片视频 | 三级大片网站 | 久久久不卡国产精品一区二区 | 久久女同互慰一区二区三区 | 亚洲涩涩精品专区 | 99精品免费在线观看 | 九九草在线观看 | 亚洲国产日韩欧美一区二区三区 | 久久精品国产亚洲7777小说 | 手机看片1024久久精品你懂的 | 手机在线色 | 国产高清在线视频 | 国产真实搭讪系列 | 久久久久久免费播放一级毛片 | 国产视频三区 | 综合久久影院 | 成年女人看片免费视频播放器 | 久久久久久国产精品免费免费 | 免费观看欧美一级毛片 | 欧美日韩精品在线播放 | 亚洲天堂美女 | 欧美日本色 | 手机看片自拍自自拍日韩免费 | 国产永久高清免费动作片www | 久久思| 在线观看亚洲精品国产 | 国产xvideos国产在线 | 被老外玩爽的中国美女视频 | 免费看一片| 港台三级在线观看 |