執行緒池的實現方式 ExecutorService

2021-10-05 14:35:00 字數 2119 閱讀 9128

使用 threadpoolexecutor 實現執行緒池的建立,有4個不同的構造方法。

public

threadpoolexecutor

(int corepoolsize,

int maximumpoolsize,

long keepalivetime, timeunit unit, blockingqueue

workqueue)

public

threadpoolexecutor

(int corepoolsize,

int maximumpoolsize,

long keepalivetime, timeunit unit, blockingqueue

workqueue, threadfactory threadfactory)

public

threadpoolexecutor

(int corepoolsize,

int maximumpoolsize,

long keepalivetime, timeunit unit, blockingqueue

workqueue, rejectedexecutionhandler handler)

public

threadpoolexecutor

(int corepoolsize,

int maximumpoolsize,

long keepalivetime, timeunit unit, blockingqueue

workqueue, threadfactory threadfactory, rejectedexecutionhandler handler)

else

}else

}

引數說明:

corepoolsize:表示核心執行緒池的大小

maximumpoolsize:表示能建立的執行緒最大個數。

keepalivetime:表示線空閒執行緒存活時間,個數超過核心執行緒池銷毀的時間。

unit:時間單位。keepalivetime 指定時間單位

workqueue:阻塞佇列。用於儲存任務的阻塞佇列,

arrayblockingqueue, **linkedblockingqueue**,

synchronousqueue, priorityblockingqueue。

threadfactory:建立執行緒的工廠方法,通過setnameformat方法build方法設定執行緒名稱

handler:飽和策略。當執行緒池的阻塞佇列已滿和指定的執行緒都已經開啟,

說明當前執行緒池已經處於飽和狀態了,那麼就需要採用一種策略來處理這種情況。

採用的策略有這幾種:

abortpolicy: 直接拒絕所提交的任務,並丟擲rejectedexecutionexception異常;

callerrunspolicy:只用呼叫者所在的執行緒來執行任務;

discardpolicy:不處理直接丟棄掉任務;

discardoldestpolicy:丟棄掉阻塞佇列中存放時間最久的任務,執行當前任務

實際使用

1.通過工廠方法建立

private

static threadfactory namedthreadfactory =

newthreadfactorybuilder()

.setnameformat

("demo-pool-%d").

build()

;private

static executorservice pool =

newthreadpoolexecutor(2

,2,0l, timeunit.milliseconds,

newlinkedblockingqueue

(1024

), namedthreadfactory,

newthreadpoolexecutor.abortpolicy()

);public

static

void

main

(string[

] args)

}

多執行緒 執行緒池實現方式整理

最近有感而發,工作中用到的各種環境的多執行緒解決方案多之又多,再此先進行一些簡單的整理以備不時之需。如果有不當之處敬請指正。各種環境下的執行緒實現方法 createthread win32提供的建立執行緒api mfc下提供的cwinthread類,和afxbeginthread等等函式 qt中的q...

執行緒池建立方式及執行緒池原理

執行緒池提交任務時的執行順序如下 向執行緒池提交任務時,會首先判斷執行緒池中的執行緒數是否大於設定的核心執行緒數,如果不大於,就建立乙個核心執行緒來執行任務。如果大於核心執行緒數,就會判斷緩衝佇列是否滿了,如果沒有滿,則放入佇列,等待執行緒空閒時執行任務。如果佇列已經滿了,則判斷是否達到了執行緒池設...

執行緒池的實現

為什麼要使用執行緒池 因為執行緒的建立和銷毀佔了大量的cpu等系統資源,使用執行緒池可以解決這種情況,提高伺服器的效能。執行緒池的思想 1 先在記憶體中開闢出一些數目固定的執行緒。2 當請求到達時,從執行緒池中選擇乙個空閒的執行緒來服務,服務完成時,執行緒放入執行緒池。3 當請求到答時,將請求放到任...