Spring中ThreadPoolTaskExecutor的默认线程池类型:newFixedThreadPool还是newCachedThreadPool?
Spring ThreadPoolTaskExecutor 默认线程池类型说明
ThreadPoolTaskExecutor 默认既不是Executors.newFixedThreadPool(),也不是Executors.newCachedThreadPool(),它基于JDK的ThreadPoolExecutor实现,有一套独立的默认配置:
- 核心线程数:
1 - 最大线程数:
Integer.MAX_VALUE - 空闲线程存活时间:
60秒 - 任务队列:无界的
LinkedBlockingQueue(容量为Integer.MAX_VALUE)
和两种Executors创建的线程池差异:
- 对比newFixedThreadPool:
newFixedThreadPool的核心线程数与最大线程数相等,且使用无界队列;而ThreadPoolTaskExecutor默认核心线程数仅为1,最大线程数无上限。 - 对比newCachedThreadPool:
newCachedThreadPool核心线程数为0,使用SynchronousQueue(直接提交任务给线程);ThreadPoolTaskExecutor默认核心线程数为1,用的是无界LinkedBlockingQueue,任务会先进入队列而非直接创建新线程。
模拟两种线程池的配置方式:
- 要模拟
newFixedThreadPool:将corePoolSize和maxPoolSize设为相同值(比如5),队列容量可按需调整或保持默认。 - 要模拟
newCachedThreadPool:设置corePoolSize=0、maxPoolSize=Integer.MAX_VALUE、queueCapacity=0(此时会自动使用SynchronousQueue),存活时间可保持默认60秒。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

