當前位置:編程學習大全網 - 編程語言 - 源碼修煉筆記之Dubbo線程池策略

源碼修煉筆記之Dubbo線程池策略

FixedThreadPool

FixThreadPool內部是通過ThreadPoolExecutor來創建線程,核心線程數和最大線程數都是上下文中指定的線程數量threads,因為不存在空閑線程所以keepAliveTime為0,

當queues=0,創建SynchronousQueue阻塞隊列;

當queues<0,創建無界的阻塞隊列LinkedBlockingQueue;

當queues>0,創建有界的阻塞隊列LinkedBlockingQueue。

采用dubbo自己實現的線程工廠NamedInternalThreadFactory,將線程置為守護線程(Demon)

拒絕策略為AbortPolicyWithReport,策略為將調用時的堆棧信息保存到本地文件中,並拋出異常RejectedExecutionException

CachedThreadPool

CachedThreadPool與FixedThreadPool的區別是核心線程數和最大線程數不相等,通過alive來控制空閑線程的釋放

LimitedThreadPool

LimitedThreadPool與CachedThreadPool的區別是空閑線程的超時時間為Long.MAX_VALUE,相當於線程數量不會動態變化了,創建的線程不會被釋放。

EagerThreadPool

與上述三種線程池不同,EagerThreadPool並非通過JUC中的ThreadPoolExecutor來創建線程池,而是通過EagerThreadPoolExecutor來創建線程池,EagerThreadPoolExecutor繼承自ThreadPoolExecutor,實現自定義的execute方法,采用的阻塞隊列是TaskQueue,TaskQueue繼承自LinkedBlockingQueue。

execute方法首先調用ThreadPoolExecutor的execute方法,如果執行失敗會重新放入TaskQueue進行重試。

實現自定義的ThreadPool

ThreadPool被定義為壹個擴展點,如下所示,

其默認實現是FixedThreadPool,可以通過實現該擴展來實現自定義的線程池策略。

  • 上一篇:去微軟應聘需要什麽條件?
  • 下一篇:PG職責是什麽
  • copyright 2024編程學習大全網