RocketMQ的线程池是ThreadPoolExecutor,线程池的核心线程数等于mq设置的最小线程数,线程池的最大线程数等于mq设置的最大线程数。 即:ThreadPoolExecutor.corePoolSize == RocketMQ.consumeThreadMin ThreadPoolExecutor.maximumPoolSize == RocketMQ.consumeThreadMax 所以问题变更为 ThreadPoolExecutor的实现逻辑是 然而MQ在new队列的时候,并没有设置容量大小,所以是无界队列...基本是不会满的。 总结起来就是: 1.rocketMQ用的是ThreadPoolExecutor 2.ThreadPoolExecutor只有当任务队列满了才会启动大于核心线程数的新线程 3.rocketMQ传给ThreadPoolExecutor的队列是没设置容量的无界队列 4.所以任务队列基本不会满 5.所以ThreadPoolExecutor基本不会新建大于核心线程数的线程 6.所以rocketMQ设置的ConsumeThreadMax是无效的 ps:虽然实际线程数不会达到consumeThreadMax,但该值还是要大于consumeThreadMin,不然mq会判断为报错。 有关ThreadPoolExecutor的maximumPoolSize的逻辑:https://blog.csdn.net/daizzzzz/article/details/106642029 《ThreadPoolExecutor coreSize、maxPoolSize 的一个理解误区》 有关无界队列LinkedBlockingQueue:https://blog.csdn.net/joeyon1985/article/details/44591589《LinkedBlockingQueue》 |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 19:07 , Processed in 0.037118 second(s), 19 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.