
- 面試中非常高頻的一個面試題:解釋一下執行緒池中各個引數的含義, 這是一個非常常見但是卻會卡死一大堆人的一道面試題,能夠細致的了解執行緒池的各個引數的含義對我們學習執行緒池和使用執行緒池有著巨大的好處的,
- 首先我們來看一下執行緒池主要的引數:
| 引數名 | 引數含義 |
|---|---|
| corePoolSize | 核心執行緒數 |
| maxinumPoolSize | 最大執行緒數 |
| keepAliveTime | 空閑執行緒存活時間 |
| unit | 存活時間的單位 |
| workQueue | 存放執行緒任務佇列 |
| threadFactory | 執行緒工廠,創建新執行緒 |
| handler | 執行緒池拒絕處理后的任務 |
- 上面展示的引數中第三個和第四個引數算是一個,時間和單位的組合
corePoolSize代表核心執行緒數,也就是正常情況下創建作業的執行緒數,這些執行緒創建后并不會消除,而是一種常駐執行緒maxinumPoolSize代表的是最大執行緒數,它與核心執行緒數相對應,表示最大允許被創建的執行緒數,比如當前任務較多,將核心執行緒數都用完了,還無法滿足需求時,此時就會創建新的執行緒,但是執行緒池內執行緒總數不會超過最大執行緒數

-
keepAliveTime、unit表示超出核心執行緒數之外的執行緒的空閑存活時間,也就是核心執行緒不會消除,但是超出核心執行緒數的部分執行緒如果空閑一定的時間則會被消除,我們可以通過setKeepAliveTime來設定空閑時間 -
workQueue用來存放待執行的任務,假設我們現在核心執行緒都已被使用,還有任務進來則全部放入佇列,直到整個佇列被放滿但任務還再持續進入則會開始創建新的執行緒 -
ThreadFactory實際上是一個執行緒工廠,用來生產執行緒執行任務,我們可以選擇使用默認的創建工廠,產生的執行緒都在同一個組內,擁有相同的優先級,且都不是守護執行緒,當然我們也可以選擇自定義執行緒工廠,一般我們會根據業務來制定不同的執行緒工廠 -
Handler任務拒絕策略,有兩種情況,第一種是當我們呼叫shutdown等方法關閉執行緒池后,這時候即使執行緒池內部還有沒執行完的任務正在執行,但是由于執行緒池已經關閉,我們再繼續想執行緒池提交任務就會遭到拒絕,另一種情況就是當達到最大執行緒數,執行緒池已經沒有能力繼續處理新提交的任務時,這是也就拒絕 -
整個的流程如下:

本文由AnonyStar 發布,可轉載但需宣告原文出處,
歡迎關注微信公賬號 :云棲簡碼 獲取更多優質文章
更多文章關注筆者博客 :云棲簡碼 i-code.online
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/191691.html
標籤:Java
上一篇:「IDEA插件精選」安利一個IDEA騷操作:一鍵生成方法的序列圖
下一篇:010_Java歷史及特性
