1. 程式人生 > >[高頻面試]解釋執行緒池的各個引數含義

[高頻面試]解釋執行緒池的各個引數含義

![](https://img2020.cnblogs.com/other/2024393/202010/2024393-20201026084012446-179508656.png) - 面試中非常高頻的一個面試題:解釋一下執行緒池中各個引數的含義。 這是一個非常常見但是卻會卡死一大堆人的一道面試題,能夠細緻的瞭解執行緒池的各個引數的含義對我們學習執行緒池和使用執行緒池有著巨大的好處的。 - 首先我們來看一下執行緒池主要的引數: | 引數名 | 引數含義 | | :---: | :---: | | corePoolSize | 核心執行緒數 | | maxinumPoolSize | 最大執行緒數 | | keepAliveTime | 空閒執行緒存活時間 | | unit | 存活時間的單位 | | workQueue | 存放執行緒任務佇列 | | threadFactory | 執行緒工廠,建立新執行緒 | | handler | 執行緒池拒絕處理後的任務 | - 上面展示的引數中第三個和第四個引數算是一個,時間和單位的組合 - `corePoolSize` 代表核心執行緒數,也就是正常情況下建立工作的執行緒數,這些執行緒建立後並不會消除,而是一種常駐執行緒 - `maxinumPoolSize` 代表的是最大執行緒數,它與核心執行緒數相對應,表示最大允許被建立的執行緒數,比如當前任務較多,將核心執行緒數都用完了,還無法滿足需求時,此時就會建立新的執行緒,但是執行緒池內執行緒總數不會超過最大執行緒數
![](https://img2020.cnblogs.com/other/2024393/202010/2024393-20201026084013111-1254824872.png)
- `keepAliveTime`、`unit` 表示超出核心執行緒數之外的執行緒的空閒存活時間,也就是核心執行緒不會消除,但是超出核心執行緒數的部分執行緒如果空閒一定的時間則會被消除,我們可以通過 `setKeepAliveTime` 來設定空閒時間 - `workQueue` 用來存放待執行的任務,假設我們現在核心執行緒都已被使用,還有任務進來則全部放入佇列,直到整個佇列被放滿但任務還再持續進入則會開始建立新的執行緒 - `ThreadFactory` 實際上是一個執行緒工廠,用來生產執行緒執行任務。我們可以選擇使用預設的建立工廠,產生的執行緒都在同一個組內,擁有相同的優先順序,且都不是守護執行緒。當然我們也可以選擇自定義執行緒工廠,一般我們會根據業務來制定不同的執行緒工廠 - `Handler` 任務拒絕策略,有兩種情況,第一種是當我們呼叫`shutdown` 等方法關閉執行緒池後,這時候即使執行緒池內部還有沒執行完的任務正在執行,但是由於執行緒池已經關閉,我們再繼續想執行緒池提交任務就會遭到拒絕。另一種情況就是當達到最大執行緒數,執行緒池已經沒有能力繼續處理新提交的任務時,這是也就拒絕 - 整個的流程如下: ![](https://img2020.cnblogs.com/other/2024393/202010/2024393-20201026084013586-1707067449.png) -------------------------------------------------------------------------- > 本文由AnonyStar 釋出,可轉載但需宣告原文出處。 > 歡迎關注微信公賬號 :雲棲簡碼 獲取更多優質文章 > 更多文章關注筆者部落格 :[雲棲簡碼 i-code.online](https://i-code.online/)