執行緒池底層原理《二》

2021-10-21 06:51:14 字數 860 閱讀 6615

當執行緒數小於核心執行緒數時,建立執行緒

當執行緒數大於等於核心執行緒數,且任務佇列未滿時,將任務放入任務佇列

當執行緒數大於等於核心執行緒數,且任務佇列已滿時,

(1) 若執行緒數小於最大執行緒數,建立執行緒

(2) 若執行緒數等於最大執行緒數,丟擲異常,拒絕任務

abortpolicy 丟棄任務,拋執行時異常。

callerrunspolicy 執行任務。

discardpolicy 忽視,什麼都不會發生。

discardoldestpolicy 從佇列中剔除最先進入佇列(最後乙個執行)的任務。

實現rejectedexecutionhandler介面,可自定義處理器。

abortpolicy 丟棄任務,拋執行時異常。

callerrunspolicy 執行任務。

discardpolicy 忽視,什麼都不會發生。

discardoldestpolicy 從佇列中剔除最先進入佇列(最後乙個執行)的任務。

實現rejectedexecutionhandler介面,可自定義處理器。

因為預設的executors執行緒池底層是基於threadpoolexecutor建構函式封裝的,採用無界佇列存放快取任務,會一直快取任務,容易發生執行緒池佇列溢位。

public

static executorservice newfixedthreadpool

(int nthreads)

實際開發專案中,禁止自己new執行緒。

必須使用執行緒池來維護和建立執行緒。

執行緒池底層工作原理和流程

當提交任務執行excute時 1.若正在執行的執行緒數量小於corepoolsize,則執行緒池馬上建立執行緒執行任務 2.如果正在執行的執行緒數量大於等於corepoolsize,則多餘的任務加入阻塞佇列等待 3.如果佇列滿了且正在執行的執行緒數量小於maximumpoolsize,那麼還要建立非...

執行緒池底層佇列詳解

如果執行的執行緒數 corepoolsize,則 executor始終首選新增新的執行緒,而不進行排隊。即任務根本不會存入queue中,而是直接執行 如果執行的執行緒數 corepoolsize,則 executor 始終首選將請求加入佇列,而不新增新的執行緒。如果無法將請求加入佇列,則建立新的執行...

執行緒池底層核心介面簡析

threadpoolexcecutor構造方法引數 1.繼承關係 executor executorservice abstractexecutorservice threadpoolexecutor public threadpoolexecutor int corepoolsize,int ma...