執行緒池 ThreadPoolExcutor

2021-10-04 06:29:27 字數 1493 閱讀 6150

executor介面很簡單,只有乙個execute方法。

executorservice是executor的子介面,增加了一些常用的對執行緒的控制方法,之後使用執行緒池主要也是使用這些方法。

abstractexecutorservice是乙個抽象類。threadpoolexecutor就是實現了這個類。

new threadpoolexecutor(int corepoolsize, int maximumpoolsize,long keepalivetime,

timeunit unit,blockingqueue workqueue, threadfactory threadfactory,

rejectedexecutionhandler handler)

1.corepoolsize:  核心執行緒數,默然存活,即使空閒也不會受超時時間限制

2. maxinumpoolsize:  執行緒池中所能容納下的最大執行緒數,

3. keepalivetime:非核心執行緒閒置的時間,超過這個時間就會被**

4. unit: 指定keepalivetime的單位

5.workqueue:執行緒中的任務佇列, 主要分為是三個:synchronousqueue,linkedblockingqueue,arrayblockingaueue

6. threadfactory: 執行緒工廠,提供建立新執行緒的功能

7. handler: 執行緒池對拒絕任務的處理策略

當乙個任務通過execute()方法新增任務時:1. 如果此時執行緒池中的數量小於 corepoolsize: 即使執行緒中的執行緒處於空閒狀態,執行緒池也要建立新的執行緒來處理任務2.如果此時執行緒池中的數量等於 corepoolsize:如果快取佇列 workqueue沒有滿,就放人快取佇列3.如果此時執行緒池中的數量大於corepoolsize,緩衝佇列workqueue滿,並且執行緒池中的數量小於maximumpoolsize,建新的執行緒來處理被新增的任務。

4.如果此時執行緒池中的數量大於corepoolsize,緩衝佇列workqueue滿,並且執行緒池中的數量等於maximumpoolsize,那麼通過 handler所指定的策略來處理此任務。

也就是:處理任務的優先順序為: 

核心執行緒corepoolsize、任務佇列workqueue、最大執行緒maximumpoolsize,如果三者都滿了,使用handler處理被拒絕的任務。 

當執行緒池中的執行緒數量大於 corepoolsize時,如果某執行緒空閒時間超過keepalivetime,執行緒將被終止。這樣,執行緒池可以動態的調整池中的執行緒數。 

執行緒 執行緒池

執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...

執行緒 執行緒池

乙個簡單執行緒的建立和銷毀如下 與程序程序相比,執行緒是一種輕量級的工具,但是輕量並不代表沒有,它的建立和關閉依然需要花費時間,如果建立和銷毀的時間還大於執行緒本身完成的工作,那就會得不償失,甚至會造成out of memory。即使沒有,大量的執行緒 也會給gc帶來巨大的壓力。為了解決這樣的問題,...

mysql 執行緒池 c MySQL執行緒池

mysql執行緒池 在麼mysql中,執行緒池指的是用來管理處理mysql客戶端連線任務的執行緒的一種機制。如果把執行緒看做系統資源那麼執行緒池本質上是對系統資源的管理,對應作業系統來說執行緒的建立和銷毀是比較消耗系統資源的,頻繁的建立與銷毀執行緒必然給系統帶來不必要的資源浪費,特別是在高負載的情況...