執行緒池實現原理(二)

2021-10-19 20:08:53 字數 818 閱讀 4150

forkjoinpool(int parallelism,

forkjoinworkerthreadfactory factory,

uncaughtexceptionhandler handler,

boolean asyncmode)

接下來,我們來看一下newworkstealingpool的初始化引數分別是怎麼樣的。

public static executorservice newworkstealingpool()
工作竊取執行緒池在沒有指定並行度的時候,預設是當前jvm的cpu總數。它的工廠方法選用了預設方法。工作佇列的任務處理模式使用了fifo,也就是先進先出的佇列執行任務模式。

向執行緒池提交任務時的執行任務流程如下圖所示。

首先,當向執行緒池提交任務時,會先判斷執行緒池中的核心執行緒數是否大於設定的核心執行緒數,如果不大核心執行緒數就建立執行緒。

如果大於核心執行緒數,就會判斷緩衝佇列是否滿了,如果沒有滿,則放入緩衝佇列,等待執行緒空閒時執行任務。

如果佇列已滿,則判斷是否達到了設定的最大執行緒數,若沒有就建立執行緒來執行任務。

如果已經達到了設定的最大執行緒數,就執行指定的拒絕策略。

我們在向執行緒提交任務時可以使用excute和submit,區別在於submit可以返回乙個future物件,通過這個物件可以任務執**況,也可以取消任務的執行,還可以獲取任務執行結果或執行異常情況。submit最終excute執行的。

執行緒池實現原理

上面這幅圖作者表達的不夠完整,作者想通過如下文本來表達內含本質。過程如下 如果請求執行緒小於執行緒池目標執行緒,則執行緒池會新建立執行緒來處理請求 如果請求執行緒數過多,超過了目標執行緒則將請求任務放入佇列中進行緩衝 如果佇列滿了 但未達到最大執行緒池數,這時會新建立執行緒 直到上限為止即maxpo...

執行緒池實現原理

蘑菇街面試,設計乙個執行緒池 入隊非阻塞佇列 當佇列中滿了時候,放入資料,資料丟失 阻塞佇列 當佇列滿了的時候,進行等待,什麼時候佇列中有出隊的資料,那麼第11個再放進去 出隊非阻塞佇列 如果現在佇列中沒有元素,取元素,得到的是null 阻塞佇列 等待,什麼時候放進去,再取出來 執行緒池使用的是阻塞...

Java執行緒池實現原理

threadpoolexecutor是jdk提供的執行緒池實現,threadpoolexector實現了execturo介面,可以自動幫助使用者建立,銷毀和保護執行緒,先來看一下最基本的使用方式 建立乙個執行緒池final executor executor new threadpoolexecut...