這篇文章主要講解了“怎么使用Java中的線程池”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么使用Java中的線程池”吧!
創(chuàng)新互聯(lián)公司從2013年成立,先為寧蒗等服務(wù)建站,寧蒗等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為寧蒗企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
Java提供的線程池相關(guān)的工具類中,最核心的是ThreadPoolExecutor
ThreadPoolExecutor的構(gòu)造函數(shù)非常復(fù)雜,如下面代碼所示,這個最完備的構(gòu)造函數(shù)有7個參數(shù)
ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueworkQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
下面我們一一介紹這些參數(shù)的意義,你可以把線程池類比為一個項(xiàng)目組,而線程就是項(xiàng)目組的成員。
corePoolSize:表示線程池保有的最小線程數(shù)。有些項(xiàng)目很閑,但是也不能把人都撤了,至少要留 corePoolSize 個人堅(jiān)守陣地。
maximumPoolSize:表示線程池創(chuàng)建的最大線程數(shù)。當(dāng)項(xiàng)目很忙時,就需要加人,但是也不能無限制地加,最多就加到maximumPoolSize個人。當(dāng)項(xiàng)目閑下來時,就要撤人了,最多能撤到corePoolSize個人。
keepAliveTime & unit:上面提到項(xiàng)目根據(jù)忙閑來增減人員,那在編程世界里,如何定義忙和閑呢?很簡單,一個線程如果在一段時間內(nèi),都沒有執(zhí)行任務(wù),說明很閑,keepAliveTime 和 unit 就是用來定義這個“一段時間”的參數(shù)。也就是說,如果一個線程空閑了keepAliveTime & unit這么久,而且線程池的線程數(shù)大于 corePoolSize ,那么這個空閑的線程就要被回收了。
workQueue:工作隊(duì)列。
threadFactory:通過這個參數(shù)你可以自定義如何創(chuàng)建線程,例如你可以給線程指定一個有意義的名字。
handler:通過這個參數(shù)你可以自定義任務(wù)的拒絕策略。如果線程池中所有的線程都在忙碌,并且工作隊(duì)列也滿了(前提是工作隊(duì)列是有界隊(duì)列),那么此時提交任務(wù),線程池就會拒絕接收。至于拒絕的策略,你可以通過handler這個參數(shù)來指定。ThreadPoolExecutor已經(jīng)提供了以下4種策略。
CallerRunsPolicy:提交任務(wù)的線程自己去執(zhí)行該任務(wù)。
AbortPolicy:默認(rèn)的拒絕策略,會throws RejectedExecutionException。
DiscardPolicy:直接丟棄任務(wù),沒有任何異常拋出。
DiscardOldestPolicy:丟棄最老的任務(wù),其實(shí)就是把最早進(jìn)入工作隊(duì)列的任務(wù)丟棄,然后把新任務(wù)加入到工作隊(duì)列。
Java在1.6版本還增加了 allowCoreThreadTimeOut(boolean value) 方法,它可以讓所有線程都支持超時,這意味著如果項(xiàng)目很閑,就會將項(xiàng)目組的成員都撤走。
感謝各位的閱讀,以上就是“怎么使用Java中的線程池”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么使用Java中的線程池這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!