Spring的ThreadPoolTaskExecutor的池大小问题
我正在对我的Spring应用程序进行一些负载测试,现在我对.ThreadPoolTaskExecutor
内部使用的文档将“要保留在池中的线程数,即使它们处于空闲状态,[...]”和“池中允许的最大线程数”来描述。ThreadPoolExecutor
corePoolSize
maximumPoolSize
这显然意味着限制了池中的线程数。但相反,限制似乎是由 .实际上我只配置了一个 let unconfiged(这意味着使用默认值:= )。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;
}
溶液
我在文档中找到解决方案:“如果运行的线程数超过corePoolSize但小于maxmousPoolSize线程,则仅当队列已满时才会创建新线程”。缺省队列大小为 。如果我限制队列,一切正常。Integer.MAX_VALUE