Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring的池大小问题';s ThreadPoolTaskExecutor(SpringFramework 4.3.9.1版本API)_Java_Spring - Fatal编程技术网

Java Spring的池大小问题';s ThreadPoolTaskExecutor(SpringFramework 4.3.9.1版本API)

Java Spring的池大小问题';s ThreadPoolTaskExecutor(SpringFramework 4.3.9.1版本API),java,spring,Java,Spring,我正在对我的Spring应用程序进行一些负载测试,现在我对ThreadPoolTaskExecutor的配置有点困惑。内部使用的ThreadPoolExecutor文档将corePoolSize描述为 池中要保留的线程数,即使它们处于空闲状态 和maximumPoolSizeas 池中允许的最大线程数 这显然意味着maximumPoolSize限制了数量 池子里的线。但是,这一限制似乎是由 corePoolSize。实际上,我只使用100配置了corePoolSize,让maximumPoolS

我正在对我的Spring应用程序进行一些负载测试,现在我对
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来排除此问题。感谢您的评论,解决了此问题