1、構造方法:
threadpoolexecutor類提供了四個構造方法,前三個最後都呼叫最後乙個引數最全的方法:
public threadpoolexecutor(intcorepoolsize,
intmaximumpoolsize,
long
keepalivetime,
timeunit unit,
blockingqueue
workqueue,
threadfactory threadfactory,
rejectedexecutionhandler handler)
2、引數說明:
corepoolsize:核心執行緒池數,建立的執行緒達到該數量後,即使有空閒的執行緒也不會釋放。
maximumpoolsize:最大執行緒池數,建立的執行緒不會大於該數,超過核心執行緒池數corepoolsize並且等待佇列滿了之後才會繼續建立執行緒直到達到最大執行緒池數。
keepalivetime:空閒時間,超過corepoolsize的執行緒如果空閒時間超過keepalivetime,執行緒會被**。
unit:keepalivetime的單位。
workqueue:任務等待佇列,具體實現類:arrayblockingqueue,linkedblockingqueue,synchronousqueue,priorityblockingqueue 。
threadfactory:執行緒工廠,用來建立執行緒,呼叫newthread(runnable r)方法。
handler:拒絕策略,任務佇列滿了並且達到最大執行緒池數後觸發拒絕策略;abortpolicy(預設),callerrunspolicy,discardoldestpolicy,discardpolicy
3、workqueue任務佇列說明:
arrayblockingqueue:有界佇列,先進先出,需初始化佇列大小,如果佇列滿了且執行緒達到最大執行緒池數後會觸發拒絕策略。
linkedblockingqueue:無界佇列,先進先出,無需設定大小,超過核心執行緒池數後會不斷往佇列新增任務,直到記憶體溢位。
synchronousqueue:阻塞佇列,內部沒有容器,每次put乙個任務進去都得等待take方法消費完才能再put,可以理解為長度為1的佇列。executors.newcachedthreadpool內部使用的就是這個佇列。
priorityblockingqueue:優先順序佇列,優先順序高的任務會優先執行,佇列中的元素必須實現comparable介面。
4、拒絕策略說明:
abortpolicy:預設的拒絕策略,會丟擲rejectedexecutionexception異常。
discardpolicy:直接拒絕,不拋異常。
discardoldestpolicy:丟棄最早新增的再嘗試新增。
callerrunspolicy:由呼叫者直接執行。
q:為什麼執行緒達到核心執行緒池數之後是先放到等待佇列而不是再繼續建立新執行緒直到達到最大執行緒池數?
a:執行緒的建立需要獲取全域性鎖,其他執行緒會被阻塞,所以等待佇列起到乙個緩衝作用;執行緒的建立和銷毀都會消耗資源,這樣做也是為了避免頻繁的建立和銷毀執行緒。
執行緒 執行緒池
執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...
執行緒 執行緒池
乙個簡單執行緒的建立和銷毀如下 與程序程序相比,執行緒是一種輕量級的工具,但是輕量並不代表沒有,它的建立和關閉依然需要花費時間,如果建立和銷毀的時間還大於執行緒本身完成的工作,那就會得不償失,甚至會造成out of memory。即使沒有,大量的執行緒 也會給gc帶來巨大的壓力。為了解決這樣的問題,...
mysql 執行緒池 c MySQL執行緒池
mysql執行緒池 在麼mysql中,執行緒池指的是用來管理處理mysql客戶端連線任務的執行緒的一種機制。如果把執行緒看做系統資源那麼執行緒池本質上是對系統資源的管理,對應作業系統來說執行緒的建立和銷毀是比較消耗系統資源的,頻繁的建立與銷毀執行緒必然給系統帶來不必要的資源浪費,特別是在高負載的情況...