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

Java線程池7個(gè)參數(shù)的詳細(xì)含義

 更新時(shí)間:2022年03月10日 10:27:13   作者:ye17186  
java多線程開發(fā)時(shí),常常用到線程池技術(shù),這篇文章是對(duì)創(chuàng)建java線程池時(shí)的七個(gè)參數(shù)的詳細(xì)解釋,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

java多線程開發(fā)時(shí),常常用到線程池技術(shù),這篇文章是對(duì)創(chuàng)建java線程池時(shí)的七個(gè)參數(shù)的詳細(xì)解釋。

從源碼中可以看出,線程池的構(gòu)造函數(shù)有7個(gè)參數(shù)

這 7 個(gè)參數(shù)分別是:

  • corePoolSize:核心線程數(shù)。
  • maximumPoolSize:最大線程數(shù)。
  • keepAliveTime:空閑線程存活時(shí)間。
  • TimeUnit:時(shí)間單位。
  • BlockingQueue:線程池任務(wù)隊(duì)列。
  • ThreadFactory:創(chuàng)建線程的工廠。
  • RejectedExecutionHandler:拒絕策略。

下面會(huì)對(duì)這7個(gè)參數(shù)一一解釋。

一、corePoolSize 線程池核心線程大小

線程池中會(huì)維護(hù)一個(gè)最小的線程數(shù)量,即使這些線程處理空閑狀態(tài),他們也不會(huì)被銷毀,除非設(shè)置了allowCoreThreadTimeOut。這里的最小線程數(shù)量即是corePoolSize。

二、maximumPoolSize 線程池最大線程數(shù)量

一個(gè)任務(wù)被提交到線程池以后,首先會(huì)找有沒有空閑存活線程,如果有則直接將任務(wù)交給這個(gè)空閑線程來執(zhí)行,如果沒有則會(huì)緩存到工作隊(duì)列(后面會(huì)介紹)中,如果工作隊(duì)列滿了,才會(huì)創(chuàng)建一個(gè)新線程,然后從工作隊(duì)列的頭部取出一個(gè)任務(wù)交由新線程來處理,而將剛提交的任務(wù)放入工作隊(duì)列尾部。線程池不會(huì)無限制的去創(chuàng)建新線程,它會(huì)有一個(gè)最大線程數(shù)量的限制,這個(gè)數(shù)量即由maximunPoolSize指定。

三、keepAliveTime 空閑線程存活時(shí)間

一個(gè)線程如果處于空閑狀態(tài),并且當(dāng)前的線程數(shù)量大于corePoolSize,那么在指定時(shí)間后,這個(gè)空閑線程會(huì)被銷毀,這里的指定時(shí)間由keepAliveTime來設(shè)定

四、unit 空閑線程存活時(shí)間單位

keepAliveTime的計(jì)量單位

五、workQueue 工作隊(duì)列

新任務(wù)被提交后,會(huì)先進(jìn)入到此工作隊(duì)列中,任務(wù)調(diào)度時(shí)再?gòu)年?duì)列中取出任務(wù)。jdk中提供了四種工作隊(duì)列:

①ArrayBlockingQueue

基于數(shù)組的有界阻塞隊(duì)列,按FIFO排序。新任務(wù)進(jìn)來后,會(huì)放到該隊(duì)列的隊(duì)尾,有界的數(shù)組可以防止資源耗盡問題。當(dāng)線程池中線程數(shù)量達(dá)到corePoolSize后,再有新任務(wù)進(jìn)來,則會(huì)將任務(wù)放入該隊(duì)列的隊(duì)尾,等待被調(diào)度。如果隊(duì)列已經(jīng)是滿的,則創(chuàng)建一個(gè)新線程,如果線程數(shù)量已經(jīng)達(dá)到maxPoolSize,則會(huì)執(zhí)行拒絕策略。

②LinkedBlockingQuene

基于鏈表的無界阻塞隊(duì)列(其實(shí)最大容量為Interger.MAX),按照FIFO排序。由于該隊(duì)列的近似無界性,當(dāng)線程池中線程數(shù)量達(dá)到corePoolSize后,再有新任務(wù)進(jìn)來,會(huì)一直存入該隊(duì)列,而不會(huì)去創(chuàng)建新線程直到maxPoolSize,因此使用該工作隊(duì)列時(shí),參數(shù)maxPoolSize其實(shí)是不起作用的。

③SynchronousQuene

一個(gè)不緩存任務(wù)的阻塞隊(duì)列,生產(chǎn)者放入一個(gè)任務(wù)必須等到消費(fèi)者取出這個(gè)任務(wù)。也就是說新任務(wù)進(jìn)來時(shí),不會(huì)緩存,而是直接被調(diào)度執(zhí)行該任務(wù),如果沒有可用線程,則創(chuàng)建新線程,如果線程數(shù)量達(dá)到maxPoolSize,則執(zhí)行拒絕策略。

④PriorityBlockingQueue

具有優(yōu)先級(jí)的無界阻塞隊(duì)列,優(yōu)先級(jí)通過參數(shù)Comparator實(shí)現(xiàn)。

六、threadFactory 線程工廠

創(chuàng)建一個(gè)新線程時(shí)使用的工廠,可以用來設(shè)定線程名、是否為daemon線程等等

七、handler 拒絕策略

當(dāng)工作隊(duì)列中的任務(wù)已到達(dá)最大限制,并且線程池中的線程數(shù)量也達(dá)到最大限制,這時(shí)如果有新任務(wù)提交進(jìn)來,該如何處理呢。這里的拒絕策略,就是解決這個(gè)問題的,jdk中提供了4中拒絕策略:

①CallerRunsPolicy

該策略下,在調(diào)用者線程中直接執(zhí)行被拒絕任務(wù)的run方法,除非線程池已經(jīng)shutdown,則直接拋棄任務(wù)。

②AbortPolicy

該策略下,直接丟棄任務(wù),并拋出RejectedExecutionException異常。

③DiscardPolicy

該策略下,直接丟棄任務(wù),什么都不做。

④DiscardOldestPolicy

該策略下,拋棄進(jìn)入隊(duì)列最早的那個(gè)任務(wù),然后嘗試把這次拒絕的任務(wù)放入隊(duì)列

到此這篇關(guān)于Java線程池7個(gè)參數(shù)的詳細(xì)含義的文章就介紹到這了,更多相關(guān)Java線程池參數(shù)含義內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

吉安市| 东乡| 都安| 资溪县| 岳普湖县| 涡阳县| 平邑县| 万年县| 长泰县| 澄迈县| 织金县| 江安县| 平舆县| 民县| 台州市| 长泰县| 房产| 武威市| 乐山市| 英山县| 旌德县| 曲水县| 来宾市| 溧水县| 东方市| 孟连| 平和县| 贵州省| 抚州市| 兴义市| 五大连池市| 固阳县| 双峰县| 运城市| 新津县| 富锦市| 辰溪县| 本溪| 沁阳市| 永寿县| 太原市|