Java - 何时使用固定大小线程池和可变大小线程池?

Java - When to use fixed size thread pool and variable size thread pool?

在javaThreadPoolExecutor中,下面两种不同的场景会发生什么?

1) Fixed Size ThreadPool
   CoreThreadPool size = 5
   MaximumThreadPool size = 5
   Queue size = unbounded
Maximum no.of threads that can run simultaneously=?

2) Variable size ThreadPool
   CoreThreadPool size = 5
   MaximumThreadPool size = 10
   Queue size = unbounded
Maximum no.of threads that can run simultaneously=?

还有什么时候使用这两种情况?

唯一的区别是第二个设置允许您 运行 最多有 10 个线程;而第一个以 5 开头;并且永远不会创造更多。

当您了解在寻求更多线程时不会获得更多收益时,您将使用第一个设置 performance/throughput/...。另一方面,请记住,固定大小也意味着:周围总是有 5(或 10)个线程。从这个意义上说,这种线程池在 "static" 环境中最有意义;您的 "load" 不会随着时间的推移发生很大变化。您不希望 5 个线程完成适合 10 个线程的工作,但您也不希望 10 个线程大部分时间都处于空闲状态,因为 5 个就足够了。

换句话说:这在很大程度上取决于您的整个设置;关于传入流量以及许多其他因素,多少线程会给您 "best" 结果。所以,当有疑问时,你应该仔细分析;并测试更改 one 变量(如最大线程数)对您有何影响。但当然:所有这些都要求您有很好的方法来衡量您的应用程序的 performance/behavior。