執行緒池的原理

2021-09-29 13:18:02 字數 2024 閱讀 1529

簡單選擇排序過程中需要進行的比較次數與初始狀態下待排序的記錄序列的排列情況無關

執行緒池的基本原理

一 、併發佇列

是乙個基於鏈結節點的無界線程安全佇列,採用先進先出規則對節點排序,新增元素至尾部,獲取元素在佇列頭,

1、阻塞佇列

插入的資料大於佇列長度時,

入隊,等待,什麼時候又出來的,什麼時候插入

出隊,資料少於佇列長度,出隊時會等待,什麼時候放進去,什麼時候取出來

2、非阻塞佇列

入隊,插入資料大於佇列長度時候,多於資料會丟失

出隊,資料少於對佇列長度會取出null值

執行緒就是基於阻塞佇列實現的

二、執行緒池

也叫執行緒的集合,是多執行緒處理形式,將任務新增至佇列,執行緒池會在啟動時建立大量空閒執行緒,

程式將任務傳給執行緒池,執行緒池啟動一條執行緒來處理任務,執行結束後,執行緒不死亡,再次變為空閒狀態,等待下個任務執行

其生命週期,新生,就緒,執行,死亡

3、原理

executor介面的核心方法execute(),用來傳入任務,實現類threadpoolexecutor,這也是執行緒的核心類,在其構造方法中有這些引數。

workqueue一般有以下三種阻塞佇列:

threadfactory是當佇列已滿,但執行緒總數量《最大執行緒池大小時,執行緒池中用來建立新執行緒的執行緒工廠。

arrayblockingqueue:有界線程安全的阻塞佇列。

linkedblockingqueue:併發安全的阻塞佇列。

synchronousqueue:同步佇列。

handler觸發時,有以下四種拒絕處理策略:

hreadpoolexecutor.abortpolicy(預設):丟棄任務並丟擲rejectedexecutionexception(拒絕執行異常)異常。

threadpoolexecutor.discardpolicy:也是丟棄任務,但是不丟擲異常。

threadpoolexecutor.discardoldestpolicy:丟棄佇列最前面的任務,然後重新嘗試執行任務(重複此過程)

threadpoolexecutor.callerrunspolicy:由呼叫執行緒處理該任務

三、首先建立乙個最簡單型別的執行緒池,構造方法只有五個引數,每個引數意義如下:

1:核心執行緒數corepollsize

2:最大執行緒數maximumpoolsize

3:空閒時間。新建立的執行緒執行任務後等待新任務的空閒時間timeunit.seconds:時間單位,秒

new linkedblockingdeque:(無界併發安全)阻塞佇列,長度為3

現有一線程池,裡面只有乙個核心執行緒thread1,第乙個任務進入執行緒池中,由thread1執行,而2-4號執行緒處在佇列中等待執行,當5號任務提交時,根據原理圖,此時滿足佇列已滿,且核+新<=最大(1+1<=2),所以建立新執行緒thread2,由thread1和thread2分攤執行任務,由執行結果也可以看出,確實是分攤任務。

當加上第6條的任務時,根據原理圖,此時佇列已滿,且核+新》最大(1+1+1>2),沒有多餘的執行緒執行任務,佇列也無法裝入,就會報錯,拒絕任務。

三、執行緒池的分類

可快取:newcachedthreadpool

作用:建立乙個根據需要建立新執行緒池的執行緒池。當舊執行緒釋放資源後就可以使用舊執行緒。

特點:執行緒數靈活最大值為inter.max_value,底層採用乙個近似無邊界佇列

定長:newfixedthreadpool

作用:建立乙個可重用固定執行緒數的執行緒池,以共享的無界佇列來執行這些執行緒。

特點:執行緒處於一定量,可以很好的控制併發量

定時:newschedulethreadpool

作用:建立乙個可延遲或延期執行的執行緒池。

特點:執行緒池中具有指定數量的執行緒,可定時或延遲執行,適用於週期性執行任務的場景。

單例:newsinglethreadexecutor

作用:建立乙個只有乙個執行緒的執行緒池。且執行緒的存貨時間是無限的,當該執行緒正繁忙時,對於新任務會進入無界的阻塞佇列中。

特點:適用於乙個乙個任務執行的場景。

執行緒池1 執行緒池原理

執行緒池可以看做容納執行緒的容器 乙個應用程式最多只能有乙個執行緒池 threadpool靜態類通過queueuserworkitem 方法將工作函式排入執行緒池 每排入乙個工作函式,就相當於請求建立乙個執行緒 執行緒池的作用 執行緒池是為突然大量爆發的執行緒設計的,通過有限的幾個固定執行緒為大量的...

執行緒池的原理

再windows作業系統中是有執行緒池的,不需要人去寫,但是再unix系統中沒有執行緒池的概念 所以需要人為的去寫 執行緒池包含這樣幾個概念,乙個任務佇列,互斥鎖,和環境變數,還有很多執行緒 1 由任務佇列通向執行緒的這條路上,同時只能有乙個任務,執行緒接受這個任務後處於執行狀態,互斥鎖鎖上,就和上...

執行緒池的原理

簡單選擇排序過程中需要進行的比較次數與初始狀態下待排序的記錄序列的排列情況無關 執行緒池的基本原理 一 併發佇列 是乙個基於鏈結節點的無界線程安全佇列,採用先進先出規則對節點排序,新增元素至尾部,獲取元素在佇列頭,1 阻塞佇列 插入的資料大於佇列長度時,入隊,等待,什麼時候又出來的,什麼時候插入 出...