26 執行緒池 ThreadPoolExecutor

2022-04-19 18:48:12 字數 2420 閱讀 6999

【threadpoolexecutor簡述】

無論是executors類的newfixedthreadpool()、newsinglethreadexecutor(),還是newcachedthreadpool()方法,雖然看起來建立的執行緒有著完全不同的特點,期內部實現均使用了threadpoolexecutor實現。

下面展示一下executors類中對應的以上幾個靜態方法的原始碼:

[ newfixedthreadpool()方法 ]

[ newsinglethreadexecutor()方法]

[ newcachedthreadpool()方法 ]

【threadpoolexecutor構造方法】

以上執行緒池的實現**可以看到,他們都是threadpoolexecutor類的封裝。

threadpoolexecutor類功提供了四個構造方法

public

class

threadpoolexecutorextends abstractexecutorservice

【引數詳解】

* courepoolsize

指定了執行緒池中的執行緒數量。預設情況下,執行緒池中沒有任何執行緒,而是等待有任務到來才去建立執行緒並執行任務,除非呼叫了prestartallcorethreads()或者prestartcorethread()方法,從這兩個方法名字可以看出,就是預建立執行緒的意思,即在任務到來之前就建立了corepoolsize個執行緒或者1個執行緒。預設情況下,執行緒池中的執行緒數為0,當有任務來之後,就會建立乙個執行緒去執行任務。當執行緒池的執行緒數目達到corepoolsize後,就會把達到的任務放到快取佇列當中。

* maximumpoolsize

指定了執行緒池中最大執行緒數量。它表示執行緒池最多能建立多少個執行緒。

* keepalivetime

表示執行緒池中的執行緒沒有任務執行時最多或保留多久時間會終止。

預設情況下,只有當執行緒池中的執行緒數大於corepoolsize時,keepalivetime才會起作用,即超過corepoolsize的空閒執行緒,在多長的時間內,會被銷毀。

* unit

引數keepalivetime的時間單位,有7種取值

timeunit.days;              //

天timeunit.hours; //

小時timeunit.minutes; //

分鐘timeunit.seconds; //

秒timeunit.milliseconds; //

毫秒timeunit.microseconds; //

微妙timeunit.nanoseconds; //

納秒

* workqueue乙個阻塞任務佇列,用來儲存等待執行的任務,這個引數的選擇非常重要,會對執行緒池的執行過程產生較大影響。

一般可以選擇如下:

arrayblockingqueue;    //

使用較少

linkblockingqueue;

//經常使用

synchronousqueue;

//經常使用

* threadfactory執行緒工廠,主要用來建立執行緒,一般選擇預設即可

* handler

拒絕策略,當任務太多時,如何拒絕任務。

一共有以下取值:

threadpoolexecutor.abortpolicy

//直接丟棄任務,丟擲rejectedexecutionexception異常,阻止系統工作

threadpoolexecutor.discardpolicy

//丟棄任務,不予任何處理,不丟擲異常

threadpoolexecutor.discardoldestpolicy

//丟棄最老的一乙個任務,即佇列最前面的任務,然後重新嘗試執行任務,並重複此過程

threadpoolexecutor.callerrunspolicy

//由呼叫執行緒處理該任務

執行緒池 Thread Pool

烽驛2009開源實時通訊平台 原始碼獲取 svn checkouthttp fy2009.googlecode.com svn trunk fy2009 read only 眾所周知,執行緒並非越多越好,理論上乙個cpu 或core 乙個活動執行緒可獲得最佳效能。執行緒池可根據具體硬體的情況 如cp...

ThreadPool(執行緒池)

任務後台基礎 執行緒池。建立執行緒需要時間。如果有不同的短任務要完成,就可以事先建立許多執行緒,在應完成這些任務時發出請求,這個執行緒最好在需要更多的執行緒時增加,在需要釋放資源時減少。不需要自己建立這樣的乙個列表,該錶由threadpool類託管,這個類會在需要時增減池中線程的執行緒數,直到達到最...

ThreadPool 執行緒池

最近在做通訊的專案,裡面需要使用點執行緒池,這裡做下筆記,歡迎指點!執行緒池功能 應用程式可以有多個執行緒,net框架為每個程序提供了乙個執行緒池,乙個執行緒池有若干個等待操作狀態,當乙個等待操作完成時,執行緒池中的輔助線程會執行 函式。執行緒池中的執行緒由系統管理,程式設計師不需要費力於執行緒管理...