假设一个 java 应用程序有自己的线程池来支持并发任务执行,并且总共分配了 500 个线程。 Tomcat 还配置为通过连接器配置支持总共 1000 个线程。
1000 个线程的连接器配置是作为 500 个线程应用程序线程池的超集,还是这两个独立的线程池?这是否意味着总共为部署的应用程序分配了 1000 个线程,还是 500 + 1000 = 1500?
最佳答案
当您将连接器配置为最多 1000 个线程时,连接器将最多有 1000 个线程。它不会检查同一 VM 中可能有多少线程处于 Activity 状态。
你没有说明你是如何分配你的自定义线程池的,但我从来没有遇到过一个线程池将它允许的线程数与系统中发生的其他事情相关联(除了用完内存)。
那么你回答的原因就是 1500。
也很容易发现:只需将您的系统置于它应该处理 1000 个线程的负载下并导致线程转储。当您配置一个具有 1000 个线程的连接器时,您显然是在这样做,因为您已经测量出这是适合您处理的容量的大小,这意味着您拥有可以轻松生成该负载的负载测试。
而不是生成所有这些线程,我想推荐查看 java.util.concurrent.Executor
及其亲戚。
关于java - 应用级线程池和tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45539216/