线程池类型
dubbo
提供了4中线程池类型
fixed
固定大小线程池,启动时建立线程,不关闭,一直持有(缺省)
core-size
默认值:200,
可配置
max-size
默认值:200,
可配置
queue-size
默认值:0,
可配置
- 等于 0 时:SynchronousQueue
- 不等于 0 时:LinkedBlockingQueue
keep-alive
默认值:0
cached
缓存线程池,空闲一分钟自动删除,需要时重建
core-size
默认值:0,
可配置
max-size
默认值:Integer.MAX_VALUE,
可配置
queue-size
默认值:0,
可配置
- 等于 0 时:SynchronousQueue
- 不等于 0 时:LinkedBlockingQueue
keep-alive
默认值:60 * 1000(ms),
可配置
limited
可伸缩线程池,但池中的线程数只会增长不会收缩。
可能只增长不收缩的目的是为了避免收缩时突然来了大流量引起的性能问题
core-size
默认值:0,
可配置
max-size
默认值:200,
可配置
queue-size
默认值:0,
可配置
- 等于 0 时:SynchronousQueue
- 不等于 0 时:LinkedBlockingQueue
keep-alive
默认值:Long.MAX_VALUE
eager
优先创建
Worker
线程。在任务数量大于core-size
但是小于max-size
时,优先创建Worker
来处理任务。当任务数量大于max-size
时,将任务放入阻塞队列中core-size
默认值:0,
可配置
max-size
默认值:Integer.MAX_VALUE,
可配置
queue-size
默认值:1,
可配置
- 等于 0 时:SynchronousQueue
- 不等于 0 时:LinkedBlockingQueue
keep-alive
默认值:60 * 1000(ms),
可配置
ThreadPoolExecutor参数 | 对应Dubbo URL参数 | 对应Dubbo配置项 |
---|---|---|
core-size | corethreads | fixed: dubbo.provider.threads dubbo.protocol.threads 其他(没有在配置类中暴露出来): dubbo.provider.corethreads dubbo.protocol.corethreads(2.6.6及以前的版本ProtocolConfig中没有这个参数,2.7.0后的版本已经添加上去) |
max-size | threads | dubbo.provider.threads dubbo.protocol.threads |
queue-size | queues | dubbo.provider.queues dubbo.protocol.queues |
keep-alive | alive | 没有在配置类中暴露出来 dubbo.provider.alive dubbo.protocol.alive |
队列类型
SynchronousQueue
它的同步原理是,当生成者线程准备将元素放入这个队列时,如果这时没有消费者线程来,它就一直wait,等到有消费者线程来了,消费者线程把元素取走,他就可以返回true了。
同样的,当消费者准备从这个队列取元素时,如果这时正好有生产者线程来时,他就把元素取走返回true,否则就一直在那等生产者线程来。
LinkedBlockingQueue
- add:方法在添加元素的时候,若超出了度列的长度会直接抛出异常
- put:若向队尾添加元素的时候发现队列已经满了会发生阻塞一直等待空间,以加入元素
- offer:在添加元素时,如果发现队列已满无法添加的话,会直接返回false
其他函数:
poll:若队列为空,返回null
remove:若队列为空,抛出NoSuchElementException异常
take:若队列为空,发生阻塞,等待有元素