我正在对Spring应用程序进行一些负载测试,现在我对ThreadPoolTaskExecutor
的配置感到有点困惑。内部使用的ThreadPoolExecutor
文档将corePoolSize
描述为
要保留在池中的线程数,即使它们处于空闲状态
和maximumPoolSize
为
池中允许的最大线程数。
这显然意味着maximumPoolSize
限制了数量
池中的线程。但相反,限制似乎是由
corePoolSize
。实际上我只用corePoolSize
配置了100,让maximumPoolSize
取消配置(这意味着使用了默认值:Integer.MAX_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;
}