1. 程式人生 > >【筆記】ThreadPoolExecutor原始碼閱讀(三)

【筆記】ThreadPoolExecutor原始碼閱讀(三)

執行緒數量的維護

執行緒池的大小有兩個重要的引數,一個是corePoolSize(核心執行緒池大小),另一個是maximumPoolSize(最大執行緒大小)。執行緒池主要根據這兩個引數對執行緒池中執行緒的數量進行維護。

需要注意的是,執行緒池建立之初是沒有任何可用執行緒的。只有在有任務到達後,才開始建立執行緒,並複用執行緒。

注:此圖不是狀態圖,不是說新增一個執行緒就直接到達corePoolSize狀態,而是要表示,一直新增執行緒直到達到corePoolSize。

註釋裡也寫的很清楚了:

(1)如果執行緒數未達核心數,則每接收一個任務就建立一個工作執行緒(這裡把Worker視為工作執行緒)來處理。

(2)如果執行緒數已達到核心數,那就把任務先放入佇列。等到有工作執行緒完成任務了,會自行從佇列中取任務做。

(3)如果任務無法放入佇列,如佇列是有界佇列,且已滿。那麼就會繼續建立工作執行緒來處理這個任務。注意,這裡的新執行緒已經不是核心執行緒了。

(4)如果執行緒數量已經達到maxPoolSize,這時候就是執行緒不能再建立了,任務也放不進隊列了,就得啟動reject策略。預設策略是AbortPolicy,也就是直接報異常。