深入刨析執行緒池實現原理

2021-07-06 09:30:57 字數 1460 閱讀 2965

1.執行緒池狀態

volatileintrunstate;//獲取runstate的最後值

staticfinalintrunning    =0;

staticfinalintshutdown   =1;

staticfinalintstop       =2;

staticfinalintterminated =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...