新聞中心
線程池的各種參數(shù)

我們注重客戶提出的每個要求,我們充分考慮每一個細節(jié),我們積極的做好做網(wǎng)站、成都網(wǎng)站制作服務,我們努力開拓更好的視野,通過不懈的努力,創(chuàng)新互聯(lián)贏得了業(yè)內(nèi)的良好聲譽,這一切,也不斷的激勵著我們更好的服務客戶。 主要業(yè)務:網(wǎng)站建設,網(wǎng)站制作,網(wǎng)站設計,微信小程序開發(fā),網(wǎng)站開發(fā),技術開發(fā)實力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫的技術開發(fā)工程師。
面試的時候最常問的就是線程池的各種參數(shù)的含義,和線程池的整個運行流程,這個一定要會
ThreadPoolExecutor一共有4個構造函數(shù),但最后調(diào)用的都是如下構造函數(shù)
| 參數(shù) | 含義 |
|---|---|
| corePoolSize | 核心線程池大小 |
| maximumPoolSize | 線程池最大容量大小 |
| keepAliveTime | 線程池空閑時,線程存活的時間 |
| TimeUnit | 線程活動保持時間的單位 |
| BlockingQueue |
任務隊列,用于保存等待執(zhí)行的任務的阻塞隊列 |
| ThreadFactory | 用于設置線程的工廠 |
| RejectedExecutionHandler | 飽和策略 |
來類比學習一下這些參數(shù),我們把線程池類比為項目組,線程是這個公司的成員
corePoolSize:線程池中最少的線程數(shù),一個項目組總得有corePoolSize人堅守陣地,都是簽訂勞動合同了,不能隨便撤。
maximumPoolSize:當項目很忙時,就得加人,請其他項目組的人來幫忙。但是公司空間有限,最多只能加到maximumPoolSize個人。當項目閑了,就得撤人了,最多能撤到corePoolSize個人
keepAliveTime & unit:上面提到項目根據(jù)忙閑來增減人員,那在編程世界里,如何定義忙和閑呢?如果一個線程在keepAliveTime(時間數(shù)字)* unit(時間單位)時間內(nèi)都沒有執(zhí)行任務,說明這個線程很閑。如果此時線程數(shù)大于corePoolSize,這個線程就要被回收了
workQueue:就是任務隊列
threadFactory:自定義如果創(chuàng)建線程,例如給線程指定一個有意義的名字
handler:workQueue滿了(排期滿了),再提交任務,該怎么處理呢?這個就是處理策略,線程池提供了4種策略,你也可以實現(xiàn)RejectedExecutionHandler接口來自定義策略
| 類 | 策略 |
|---|---|
| AbortPolicy | 丟棄任務,拋運行時異常(默認的處理策略) |
| CallerRunsPolicy | 執(zhí)行任務 |
| DiscardPolicy | 忽視,什么都不會發(fā)生 |
| DiscardOldestPolicy | 丟棄隊列里最近的一個任務,并執(zhí)行當前任務 |
線程池的工作流程
可以參照一下源碼理解一下下面的流程
1.線程池剛創(chuàng)建時,里面沒有一個線程。任務隊列是作為參數(shù)傳進來的。不過,就算隊列里面有任務,線程池也不會馬上執(zhí)行他們。
2.當調(diào)用execute()方法添加一個任務時,線程池會做如下判斷:
a. 如果正在運行的線程數(shù)量小于corePoolSize,那么馬上創(chuàng)建線程運行這個任務
b. 如果正在運行的線程數(shù)量大于或等于corePoolSize,那么將這個任務放入隊列
c. 如果這時候隊列滿了,而且正在運行的線程數(shù)量小于maximunPoolSize,那么還是要創(chuàng)建非核心線程立刻運行這個任務
d. 如果隊列滿了,而且正在運行的線程數(shù)量大于或等于maximunPoolSize,那么線程池會拋出RejectedExecutionException
3.當一個線程完成任務時,它會從隊列中取下一個任務來執(zhí)行
4.當一個線程無事可做,超過一定的時間(keepAliveTime)時,線程池會判斷,如果當前運行的線程數(shù)大于corePoolSize,那么這個線程就被停掉。所以線程池的所有任務完成后,它最終會收縮到corePoolSize的大小
可以用如下圖來表示整體流程
本文轉載自微信公眾號「 Java識堂」,可以通過以下二維碼關注。轉載本文請聯(lián)系 Java識堂公眾號。
當前題目:如果我一直往線程池里面放任務,會發(fā)生什么?
瀏覽路徑:http://www.dlmjj.cn/article/dpogcso.html


咨詢
建站咨詢
