ThreadPoolExecutor的使用和介紹

2022-09-11 17:45:15 字數 2193 閱讀 2495

1、類說明:

newfixedthreadpool生成乙個固定的執行緒池,使用threadpoolexecutor()來構造,可以像tomcat的執行緒池一樣設定「最大執行緒數」、「最小執行緒數」和「空閒執行緒keepalive的時間」。

threadpoolexecutor

public threadpoolexecutor(int corepoolsize,

int maximumpoolsize,

long keepalivetime,

timeunit unit,

blockingqueueworkqueue)

用給定的初始引數和預設的執行緒工廠及被拒絕的執行處理程式建立新的 threadpoolexecutor。使用 executors 工廠方法之一比使用此通用構造方法方便得多。

引數: 

corepoolsize - 池中所儲存的執行緒數,包括空閒執行緒。

maximumpoolsize - 池中允許的最大執行緒數。

keepalivetime - 當執行緒數大於核心時,此為終止前多餘的空閒執行緒等待新任務的最長時間。

unit - keepalivetime 引數的時間單位。

workqueue - 執行前用於保持任務的佇列。此佇列僅保持由 execute 方法提交的 runnable 任務。

2、使用場景:

threadpoolexecutor 將根據 corepoolsize(參見 getcorepoolsize())和 maximumpoolsize(參見getmaximumpoolsize())設定的邊界自動調整池大小。當新任務在方法 execute(j**a.lang.runnable) 中提交時,如果執行的執行緒少於 corepoolsize,則建立新執行緒來處理請求,即使其他輔助線程是空閒的。如果執行的執行緒多於corepoolsize 而少於 maximumpoolsize,則僅當佇列滿時才建立新執行緒。如果設定的 corepoolsize 和 maximumpoolsize相同,則建立了固定大小的執行緒池。如果將 maximumpoolsize 設定為基本的無界值(如 integer.max_value),則允許池適應任意數量的併發任務。在大多數情況下,核心和最大池大小僅基於構造來設定,不過也可以使用setcorepoolsize(int) 和 setmaximumpoolsize(int) 進行動態更改。

3、常見方法:

execute
public voidexecute(runnable command)
在將來某個時間執行給定任務。可以在新執行緒中或者在現有池執行緒中執行該任務。 如果無法將任務提交執行,或者因為此執行程式已關閉,或者因為已達到其容量,則該任務由當前 rejectedexecutionhandler處理。 

引數:command- 要執行的任務。

丟擲:rejectedexecutionexception- 如果無法接收要執行的任務,則由 rejectedexecutionhandler 決定是否丟擲 rejectedexecutionexception

nullpointerexception- 如果命令為 null

shutdown
public voidshutdown()
按過去執行已提交任務的順序發起乙個有序的關閉,但是不接受新任務。如果已經關閉,則呼叫沒有其他作用。 

丟擲:securityexception- 如果安全管理器存在並且關閉此 executorservice 可能操作某些不允許呼叫者修改的執行緒(因為它沒有runtimepermission("modifythread")),或者安全管理器的 checkaccess 方法拒絕訪問。

4、相關例項

public

class

threadpoolexecutortest

catch

(interruptedexception e)

system.out.println(string.format("thread %d finished", index));

}});

}executor.shutdown();

}}

ThreadPoolExecutor使用小結

記錄一下那幾個引數的理解,網上說了亂七八糟,詳細看參考文件,很詳細很明白,沒什麼好說的。corepoolsize,maximumpoolsize,keepalivetime keepalivetime workqueue queue blocksize 執行執行緒後,會判斷數量是否超出corepoo...

ThreadPoolExecutor使用介紹

為了更好的使用多執行緒,jdk提供了執行緒池供開發人員使用,目的在於減少執行緒的建立和銷毀次數,以此達到執行緒的重複利用。其中threadpoolexecutor是執行緒池中最核心的乙個類,我們先簡單看一下這個類的繼承關係。其中executor是執行緒池的頂級介面,介面中只定義了乙個方法 void ...

ThreadPoolExecutor的不確定性

網上介紹threadpoolexecutor的文章很多,這裡不再累述。threadpoolexecutor是doug lea的大作,但是只要是人寫的 都可能出現問題。threadpoolexecutor是乙個具有動態彈性的執行緒池,其會自動根據業務的請求量來動態伸縮其內的執行緒數目 當然判斷的依據主...