執行緒池 執行緒池的4種拒絕策略

2022-09-19 20:09:10 字數 723 閱讀 2541

結合上面的圖,我們思考乙個問題,當我們建立乙個執行緒池的時候,他會有最大的執行緒數,和執行緒任務快取數。如果系統的執行緒任務突然暴增,這個時候,執行緒池的執行緒達到最大值,執行緒佇列中的快取數也達到了最大值,這個時候,沒有擠進執行緒池的該怎麼辦。

在使用執行緒池的時候,可能會遇到兩種情況,導致執行緒會需要被拒絕。

在遇到拒絕任務時,會直接丟擲乙個型別為 rejectedexecutionexception 的 runtimeexception,所以我會叫他為異常策略,因為他會丟擲異常。這個異常你可以捕獲起來,然後做你想做的事。

這個策略就比較悲傷了,當執行緒滿了之後,後面想進來的執行緒會被直接丟棄掉,丟棄掉的執行緒後面不會再執行,也不會有通知,更不會有記錄,所以這個策略比較危險,他會讓執行緒人間蒸發。這樣大家都不知道他有沒有發生過。如果發生在業務上,可能會造成業務資料的丟失。

這個就比較殘忍,雖然不會丟棄掉想要擠進來的執行緒,但是他會把執行緒佇列中存活時間久的執行緒給丟棄掉,讓想擠進來的執行緒去替代他。有點像渣男。可以把它叫為渣男策略

這個策略就比較負責了,當執行緒池滿了之後,想要進來的執行緒不會被丟棄,他會直接讓提交執行緒的執行緒去執行這個執行緒任務,也是不進入到執行緒池,你直接就地解決吧。更簡單的理解為,當遇到了這個策略,相當於這個執行緒池新增了乙個執行緒資源。

這樣的方式有兩點好處

執行緒池拒絕策略

手寫執行緒池拒絕策略 執行緒池的引數 預設策略 預設 拒絕策略 丟擲異常 程式崩潰 第二種策略 執行緒從哪來 回哪去 這個 用力 將 executorservice exec newthreadpoolexecutor 1 2,30 timeunit.microseconds,newarrayblo...

執行緒池拒絕策略

public void rejectedexecution runnable r,threadpoolexecutor e 丟擲異常表明哪個任務在哪個執行緒池中執行失敗了 public void rejectedexecution runnable r,threadpoolexecutor e 如果...

執行緒池的拒絕策略

今天我自己整理了一下threadpoolexector的最後乙個引數 拒絕策略 當新到的任務數量已經超過了系統實際能夠承載的能力時,就會觸發拒絕策略,這是系統超負荷執行的補救措施具體以下3個方面 執行緒池有乙個任務佇列,用於快取所有待處理的任務,一旦開始處理這些任務,這些任務將從任務佇列中刪除,在任...