Java Spring的池大小问题';s ThreadPoolTaskExecutor(SpringFramework 4.3.9.1版本API)
我正在对我的Spring应用程序进行一些负载测试,现在我对Java Spring的池大小问题';s ThreadPoolTaskExecutor(SpringFramework 4.3.9.1版本API),java,spring,Java,Spring,我正在对我的Spring应用程序进行一些负载测试,现在我对ThreadPoolTaskExecutor的配置有点困惑。内部使用的ThreadPoolExecutor文档将corePoolSize描述为 池中要保留的线程数,即使它们处于空闲状态 和maximumPoolSizeas 池中允许的最大线程数 这显然意味着maximumPoolSize限制了数量 池子里的线。但是,这一限制似乎是由 corePoolSize。实际上,我只使用100配置了corePoolSize,让maximumPoolS
ThreadPoolTaskExecutor
的配置有点困惑。内部使用的ThreadPoolExecutor
文档将corePoolSize
描述为
池中要保留的线程数,即使它们处于空闲状态
和maximumPoolSize
as
池中允许的最大线程数
这显然意味着maximumPoolSize
限制了数量
池子里的线。但是,这一限制似乎是由
corePoolSize
。实际上,我只使用100配置了corePoolSize
,让maximumPoolSize
未配置(这意味着使用默认值:Integer.MAX\u value=2147483647
),当我运行负载测试时,我可以看到(通过查看日志),执行的辅助线程的编号从worker-1
到worker-100
。因此,在这种情况下,线程池大小受到corePoolSize
的限制。即使我将maximumPoolSize
设置为200或300,结果也完全相同。为什么maximumPoolSize
的值对我的情况没有影响
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(100);
taskExecutor.setThreadNamePrefix("worker-");
return taskExecutor;
}
您确定负载测试同时使用100多个线程吗?您可以通过将核心池大小减少到1并查看可用大小是否超过1来排除此问题。感谢您的评论,解决了此问题