dubbo提供了四種執行緒池。其實我理解還是還是根據threadpoolexecutor這個jdk提供的執行緒池類,只不過適應性的改變了其中的引數。dubbo分別提供了1. 快取執行緒池 2。固定大小執行緒池 3. 上屆執行緒池 4.定時執行緒池。下面具體的說一說這些執行緒池。
1. 公共行為
首先這些執行緒池類均繼承了threadpool介面。該介面中的定義了getexecutor
/*** thread pool
* * @param url url contains thread parameter
* @return thread pool
*/@adaptive()
executor getexecutor(url url); // 實際上還是對jdkexcutor的封裝
可以看到其返回值還是executor。並且需要採用什麼樣的執行緒池,可以從url中進行設定。
2. cachedthreadpool
public class cachedthreadpool implements threadpool}
從原始碼中可以看到,將佇列設定為同步佇列,只要沒有沒有達到threads的數量,就會一直增加執行緒。
3.fixedthreadpool
public class fixedthreadpool implements threadpool}
固定大小執行緒池,顧名思義就是執行緒池中的執行緒數量維持著固定大小。其原理就是將其中的佇列設定為同步佇列,同時將最大池和核心池的數量都設定為一致就行。
4. limitedthreadpool
public class limitedthreadpool implements threadpool}
顧名思義,可擴張執行緒池就是通過上屆佇列儲存任務。
4.eagerthreadpoolexecutor
public class eagerthreadpoolexecutor extends threadpoolexecutor/*** @return current tasks which are executed
*/public int getsubmittedtaskcount()
@override
protected void afterexecute(runnable r, throwable t)
@override
public void execute(runnable command)
// do not increment in method beforeexecute!
submittedtaskcount.incrementandget();
try catch (rejectedexecutionexception rx)
} catch (interruptedexception x)
} catch (throwable t)
}}
這個池子的比較不同的是:還是通過threadpoolexecutor實現任務的管理,唯一不同的是當任務執行失敗的時候,會將任務儲存到自定義的taskqueue中。同時維持這乙個當前池子的任務的計數。執行緒池中的所有核心執行緒都在忙碌時,此時如果再新增新的任務不會放入阻塞佇列,而且建立新的執行緒,直到達到最大執行緒限制,此時如果還有任務,才會放入阻塞佇列。
Dubbo 執行緒池調優實戰分析
dubbo的服務提供者端一共包含了兩類執行緒池,一類叫做io執行緒池,還有一類叫做業務執行緒池,它們各自有著自己的分工,如下圖所示 all 將請求全部交給業務執行緒池處理 這裡面除了日常的消費者進行服務呼叫之外,還有關於服務的心跳校驗,連線事件,斷開服務,響應資料寫回等 execution 會將請求...
6 Dubbo執行緒模型與執行緒池策略
當我們聊dubbo執行緒模型 執行緒池策略的時候,我們應該考慮哪些問題?根據請求的訊息類被io執行緒處理還是被業務執行緒池處理,dubbo提供了下面幾種執行緒模型 alldispatcher原始碼剖析 all執行緒模型的實現如下 default thread pool configure publi...
Java中的執行緒池
降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。提高執行緒的可管理性。使用執行緒池可以進行統一分配 調優和監控。判斷工作佇列是否已經滿。判斷執行緒池的執行緒是否已滿。總結 執行緒池的主要流程圖 如果當前執行...