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

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

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

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

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

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

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

下面會對這7個參數(shù)一一解釋。

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

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

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

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

三、keepAliveTime 空閑線程存活時間

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

四、unit 空閑線程存活時間單位

keepAliveTime的計量單位

五、workQueue 工作隊列

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

①ArrayBlockingQueue

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

②LinkedBlockingQuene

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

③SynchronousQuene

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

④PriorityBlockingQueue

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

六、threadFactory 線程工廠

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

七、handler 拒絕策略

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

①CallerRunsPolicy

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

②AbortPolicy

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

③DiscardPolicy

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

④DiscardOldestPolicy

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

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

相關(guān)文章

最新評論

黔西| 芜湖县| 桦南县| 贞丰县| 余庆县| 富平县| 沙坪坝区| 揭阳市| 南安市| 天台县| 阿拉善右旗| 建宁县| 会理县| 长岛县| 雅安市| 葵青区| 沿河| 涟水县| 丰顺县| 惠水县| 拜城县| 乌苏市| 监利县| 呼图壁县| 聂荣县| 芜湖市| 富源县| 澎湖县| 陆河县| 汪清县| 武陟县| 泸水县| 南川市| 舒城县| 屏山县| 徐闻县| 孟村| 璧山县| 盱眙县| 德江县| 虹口区|