Tomcat 默认允许最多 200 个线程来处理 Spring Boot 应用程序中的请求。 假设在应用程序中,在进程启动期间,我创建了一个大小为 10 的固定线程池。
现在,当我尝试将这个东西与 tomcat 一起使用时,我将运行的最大线程总数是多少。是 200 + 10 还是 200 * 10?
我的理解是,它将是 200 + 10,因为在进程级别,只有 java 会创建线程池并在需要时使用该线程池。
这还取决于我如何启动线程池?例如,假设我创建了一个线程池执行器 bean 并在整个系统中使用它。
@Bean("helperExecutorService")
public ExecutorService helperExecutorService(HelperThreadPoolConfig helperThreadPoolConfig) {
return Executors.newFixedThreadPool(helperThreadPoolConfig.getThreadPoolSize());
}
或者我可以在代码流中创建线程池。
public void something() {
ExecutorService service = Executors.newFixedThreadPool(summariesToAutocompute.size());
... use this threadpool in the method
}```
最佳答案
对于运行在tomcat上的一个应用程序实例,tomcat会在服务器启动时创建一个线程池,应用程序启动时会创建固定的线程池。这不是一个无共享的 cgi,它是一个保留在内存中的单个长时间运行的 java 进程,200 + 10 是正确的。
如果您在方法调用中创建一个池,那么每个方法调用都会分配自己的池。因此,如果 tomcats 池中的每个线程同时发出调用创建自己池的方法的请求,则使用中的线程数可能最多为 tomcat 池大小乘以方法池大小。
一般来说,我建议不要这样做,因为它似乎削弱了使用池的两个优点:1)您可以预分配线程,这样您的代码就不必等待线程创建,2)您可以将程序使用的最大线程数的上限。
关于java - java executorService 与 tomcat 中的最大线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71418676/