執行緒池七大核心引數
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...