執行緒池七大核心引數及執行過程

2021-10-04 08:27:52 字數 1290 閱讀 4436

執行緒池七大核心引數

1.corepoolsize(核心執行緒數)

2.maxpoolsize(最大執行緒數)

3.keepalivetime(空閒**時間)

4.unit(**時間單位)

5.workqueue(任務佇列)

6.threadfactory(執行緒工廠,用於建立執行緒,一般為預設執行緒工廠即可)

7.handler(拒絕策略)

當呼叫 execute(()方法新增乙個請求任務時,執行緒池會做如下判斷:

當建立執行緒任務數小於核心執行緒數corepoolsize時則直接建立執行,當建立執行緒任務數大於核心執行緒數時則加入任務佇列workqueue中

(常用的任務佇列有有界佇列1.arrayblockingqueue,2.synchronousqueue,

無界佇列:1.linkedblockingqueue,暫不詳述。)等待,

當任務佇列也放滿之後檢視是否大於最大執行緒數maxpoolsize,如果這時候佇列滿了且正在執行的執行緒數量還小於 naximumpoolsize,,那麼還是要建立非核心執行緒立刻執行這個任務,如果大於最大執行緒數則執行拒絕策略handler

(拒絕策略有分為四種:

1. callerrunspolicy :這個策略重試新增當前的任務,他會自動重複呼叫 execute() 方法,直到成功。

2. abortpolicy :對拒絕任務拋棄處理,並且丟擲異常。

3. discardpolicy :對拒絕任務直接無聲拋棄,沒有異常資訊。

4. discardoldestpolicy :對拒絕任務不拋棄,而是拋棄佇列裡面等待最久的乙個執行緒,然後把拒絕任務加到佇列。

)如果沒有則建立執行。當乙個執行緒完成任務時,它會從佇列中取下乙個任務來執行。當乙個執行緒無事可做超過一定的時間( keepalivetime))時,執行緒池會判斷:如果當前執行的執行緒數大於 corepoolsize,,那麼這個執行緒就被停掉。所以執行緒池的所有任務完成後它最終會收縮到 corepoolsize的大小。

執行緒池七大引數介紹

executorservice threadpool executors.newfixedthreadpool 5 public static executorservice newfixedthreadpool int nthreads public threadpoolexecutor int ...

執行緒池及核心引數

一般來說,執行緒的生命週期需要通過 new 新建 start 就緒 running 執行中 dead 消亡 假設每個狀態到下乙個狀態需要的時間是 1,2,3 秒 但是我們往往只是關心running 那個狀態就可以了,這是執行緒需要執行的任務 使用執行緒池,建立一定數量的執行緒,專門執行任務的run ...

執行緒池中的七大引數(三)

1 corepoolsize 執行緒池中的常駐核心執行緒數。2 maximumpoolsize 執行緒池能夠容納同時執行的最大執行緒數,此值大於等於1。3 keepalivetime 多餘的空閒執行緒存活時間,當空間時間達到keepalivetime值時,多餘的執行緒會被銷毀直到只剩下corepoo...