java四種執行緒池的使用

2021-09-11 02:02:57 字數 1617 閱讀 8870

《1》執行緒的狀態:new(建立)、runnable(可執行)、blocked(阻塞)、waiting(等待)、timed_waiting、terminated(執行完畢)

《2》常見的四種執行緒池:

《3》引數原理講解:

(1)corepoolsize 核心執行緒數,指保留的執行緒池大小(不超過maximumpoolsize值時,執行緒池中最多有corepoolsize 個執行緒工作)。 

(2)maximumpoolsize 指的是執行緒池的最大大小(執行緒池中最大有corepoolsize 個執行緒可執行)。 

(3)keepalivetime 指的是空閒執行緒結束的超時時間(當乙個執行緒不工作時,過keepalivetime 長時間將停止該執行緒)。 

(4)unit 是乙個列舉,表示 keepalivetime 的單位(有nanoseconds, microseconds, milliseconds, seconds, minutes, hours, days,7個可選值)。 

(5)workqueue 表示存放任務的佇列(存放需要被執行緒池執行的執行緒佇列)。 

(6)handler 拒絕策略(新增任務失敗後如何處理該任務).

《4》拒絕策略:

(1)abortpolicy:丟掉這個任務並丟擲rejectedexecutionexception異常

(2)discardpolicy:直接丟掉任務,沒有任何反應

(3)discardoldestpolicy:丟掉老的任務,沒有任何反應

(4)callerrunsolicy:主線程自己去執行這個任務

(5)自定義:實現rejectedexecutionhandler介面

《5》使用示例:

《6》執行策略

(1)剛建立執行緒池時,裡面沒有執行緒;任務佇列是作為引數傳過來,即時佇列裡面

有任務,也不會馬上執行;

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

a、如果正在執行的執行緒數小於corepoolsize,那麼馬上建立執行緒執行這個任務;

b、如果大於或等於corepoolsize,那麼將這個任務加入佇列;

c、如果對列也滿了,執行執行緒數小於maximumpoolsize,建立執行緒執行這個任務;

d、對列滿了,大於或等於maximumpoolsize,那麼會拒絕這個任務;

(3)當乙個執行緒執行完了,會從佇列中去下乙個任務來執行;

(4)當乙個執行緒無事做,超過keepalivetime是,執行緒會判斷,如果當前執行數大於

corepoolsize,那麼這個任務被停掉,所以執行緒的所有任務完成後,它最終收縮到

corepoolsize的大小;

例子:這個過程說明,並不是先加入任務就一定會先執行。假設佇列大小為 4,corepoolsize為2,

maximumpoolsize為6,那麼當加入15個任務時,執行的順序類似這樣:首先執行任務 1、2,

然後任務3~6被放入佇列。這時候佇列滿了,任務7、8、9、10 會被馬上執行,而任務 11~15 

則會丟擲異常。最終順序是:1、2、7、8、9、10、3、4、5、6。當然這個過程是針對指定大

小的arrayblockingqueue來說,如果是linkedblockingqueue,因為該佇列

無大小限制,所以不存在上述問題

java四種常用執行緒池的使用

public class threadpooltest catch interruptedexception e cachedthreadpool.execute new runnable log.info ato system.out.println ato 在主線程關閉之前一共執行了幾次子執行緒...

java 四種執行緒池的簡介

前瞻 四種執行緒池內部構造都是來自同乙個方法 下面分別介紹一下各個引數的含義 corepoolsize 執行緒池中所儲存的核心執行緒數。執行緒池初始化啟動之後,預設是空的,只有當任務來臨之時,才會建立執行緒 處理請求。當然可以使用prestartcorethread 方法可以使執行緒池初始化之後,立...

四種執行緒池

其他執行緒池 核心執行緒 執行緒池大小 佇列策略 newcachedthreadpool integer.max value synchronousqueue newfixedthreadpool 建立時可以設定引數 建立時可以設定引數 linkedblockingqueue newschedule...