1. 概述
在 《Dubbo 用户指南 —— 线程模型.》 一文中,我们可以看到 Dubbo 提供了三种线程池的实现:
ThreadPool
- fixed 固定大小线程池,启动时建立线程,不关闭,一直持有。(缺省)
- cached 缓存线程池,空闲一分钟自动删除,需要时重建。
- limited 可伸缩线程池,但池中的线程数只会增长不会收缩。只增长不收缩的目的是为了避免收缩时突然来了大流量引起的性能问题。
在 dubbo-common 模块的 threadpool 包下实现,如下图所示:
2. ThreadPool
com.alibaba.dubbo.common.threadpool.ThreadPool ,线程池接口。代码如下:
@SPI("fixed")
public interface ThreadPool {
/**
* Thread pool
*
* @param url URL contains thread parameter
* @return thread pool
*/
@Adaptive({Constants.THREADPOOL_KEY})
Executor getExecutor(URL url);
}
@SPI(“fixed”) 注解,Dubbo SPI 拓展点,默认为 “fixed” 。
@Adaptive({Constants.THREADPOOL_KEY}) 注解,基于 Dubbo SPI Adaptive 机制,加载对应的线程池实现,使用 URL.threadpool 属性。
#getExecutor(url) 方法,获得对应的线程池的执行器。
子类类图如下:
2. 1 FixedThreadPool
固定大小线程池,启动时建立线程,不关闭,一直持有。(默认)
public class FixedThreadPool implements ThreadPool {
@Override
public Executor getExecutor(URL url) {
// 线程名
String name = url.getParameter(Constants.THREAD_NAME_KEY, Constant