java - tomcat 7 中的应用程序线程

标签 java multithreading spring tomcat executorservice

我有一个 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/

相关文章:

java - JOGL调试: DebugGL usage

.net - 从某个线程调用方法时"Unable to evaluate expression because the code is optimized"

java - 下面的程序有什么问题?Java wait/notify 不起作用

java - hibernate 还是 JPA?

java - Spring MVC 文件上传帮助

java - 即使 Libgdx 说它已加载到内存中,声音第一次也不会播放

java - 为什么 Jackson 库内部实现利用 getter 调用来生成 Json

java - @WebMvcTest 在 spring 启动测试中为不同的服务给出 'Error creating bean with name' 错误

java - 如何使用FolderOverlay创建新的叠加层 - OSMDroid

linux - 如何在 linux amd64 上找到当前线程的 TLS 段?