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,可以通過實現該擴展來實現自定義的線程池策略。