我有一个 web 服务,它依次调用其他 10 个 web 服务,它会导致更高的响应时间。所以我使用 ExecutorService 通过 spring servlet.xml 配置生成线程,如下所示
<bean id="executorService" class="org.springframework.scheduling.concurrent.ThreadPoolExecutorFactoryBean" scope="prototype">
<property name="corePoolSize" value="3" />
<property name="maxPoolSize" value="4" />
<property name="keepAliveSeconds" value="5" />
</bean>
我正在监视 JvisualVM 中的线程并注意到始终有 3 个 executorservices 线程。我试图了解这是否会为每个通过的请求旋转 3 个线程,或者所有请求都会尝试使用配置的相同 3 个 corePoolSize。
如果所有请求都将使用 3 个线程,则应增加核心池大小(如果是,增加到多少)?
另外,什么时候应该关闭执行器服务?
我不熟悉这种方法,有人可以帮助我了解它是如何工作的吗?
最佳答案
默认情况下,Spring 中的 Bean 是单例的,因此您只有一个 executorService
实例,它管理一个大小为 3-4 的线程池。
创建池时,它将启动 3 个线程,然后空闲直到需要。如果需要更多线程,它将最多使用 4 个线程,因此只比最初创建的线程多 1 个。
这与有多少传入请求尝试使用该池无关。
关于java - tomcat 7 中的应用程序线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32108311/