什么是固定线程池的理想大小?

时间:2016-05-06 05:09:33

标签: java multithreading concurrency threadpool

已修复线程池用于通过将整数变量传递给执行程序方法来限制java应用程序中的线程数,如下所示

Executors.newFixedThreadPool(10);

假设我们正在设计任何应用程序,并且我们正在使用固定线程池,那么我们如何才能决定理想的固定线程池大小或者我们应该根据什么来决定固定的线程池大小?

2 个答案:

答案 0 :(得分:5)

首先,

1。)您是在为整个应用程序或应用程序中的特定任务创建 FixedThreadPool 吗?

2.。)部署应用程序的服务器,支持每个CPU有多少CPU,多少个线程?

3。)可能存在这样的情况:您分配的线程数少于服务器所拥有的数量,或者可能分配更多的线程,并且您的任务不需要那么多。这或多或少是对资源的浪费。

线程池大小很少应该是硬编码的;相反,池大小应由配置机制提供,或通过咨询Runtime.availableProcessors动态计算。

更多信息,Java Concurrency in Practice有一个关于线程池的详细章节。

答案 1 :(得分:0)

如果您正在寻找基于公式的方法,那么很少 - 当然您可以获得有关支持多少核心的信息但 重要的是要记住,如果您在容器中部署应用程序,并且您的应用程序是使用框架和库构建的,那么 可能已经在系统中创建了许多提供多个服务的线程池。最重要的是这种工作(CPU / IO密集型也将发挥重要作用)。因此,您最好的选择是从一些数字开始,然后分析您的应用程序并获得最佳点。可以从here开始做一个很好的猜测(如果您不确定应用程序的环境)。您可以通过连接Jconsole轻松查看应用程序中的所有线程,并且可以看到摘要 MBeans - > java.lang - >线程 - >属性。

最后 - 在这些情况下,经验证据是最好的。