1.執行緒池狀態
volatile
int
runstate;//獲取runstate的最後值
static
final
int
running =
0
;
static
final
int
shutdown =
1
;
static
final
int
stop =
2
;
static
final
int
terminated =
3
;
2.任務的執行
任務提交給執行緒池之後的處理策略,這裡總結一下主要有4點:
3.執行緒池中的執行緒初始化
4.任務快取佇列及排隊策略
1)arrayblockingqueue:基於陣列的先進先出佇列,此佇列建立時必須指定大小;
2)linkedblockingqueue:基於鍊錶的先進先出佇列,如果建立時沒有指定此佇列大小,則預設為integer.max_value;
3)synchronousqueue:這個佇列比較特殊,它不會儲存提交的任務,而是將直接新建乙個執行緒來執行新來的任務。
5.任務拒絕策略
當執行緒池的任務快取佇列已滿並且執行緒池中的執行緒數目達到maximumpoolsize,如果還有任務到來就會採取任務拒絕策略,通常有以下四種策略:
1
2
3
4
threadpoolexecutor.abortpolicy:丟棄任務並丟擲rejectedexecutionexception異常。
threadpoolexecutor.discardpolicy:也是丟棄任務,但是不丟擲異常。
threadpoolexecutor.discardoldestpolicy:丟棄佇列最前面的任務,然後重新嘗試執行任務(重複此過程)
threadpoolexecutor.callerrunspolicy:由呼叫執行緒處理該任務
6.執行緒池的關閉
執行完shutdown()後是
shutdown狀態,即中斷狀態,而執行完shutdownnow後
是stop狀態。
7.執行緒池容量的動態調整
資料**
執行緒池實現原理
上面這幅圖作者表達的不夠完整,作者想通過如下文本來表達內含本質。過程如下 如果請求執行緒小於執行緒池目標執行緒,則執行緒池會新建立執行緒來處理請求 如果請求執行緒數過多,超過了目標執行緒則將請求任務放入佇列中進行緩衝 如果佇列滿了 但未達到最大執行緒池數,這時會新建立執行緒 直到上限為止即maxpo...
執行緒池實現原理
蘑菇街面試,設計乙個執行緒池 入隊非阻塞佇列 當佇列中滿了時候,放入資料,資料丟失 阻塞佇列 當佇列滿了的時候,進行等待,什麼時候佇列中有出隊的資料,那麼第11個再放進去 出隊非阻塞佇列 如果現在佇列中沒有元素,取元素,得到的是null 阻塞佇列 等待,什麼時候放進去,再取出來 執行緒池使用的是阻塞...
C 中虛函式多型實現的原理刨析
虛函式關鍵字 virtual 未寫virtual關鍵字前 include using namespace std class animal class cat public animal void test intmain 輸出結果 新增了virtual關鍵字後 include using name...