Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-何时使用固定大小的线程池和可变大小的线程池?_Java_Threadpoolexecutor - Fatal编程技术网

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

Java-何时使用固定大小的线程池和可变大小的线程池?,java,threadpoolexecutor,Java,Threadpoolexecutor,在java ThreadPoolExecutor中,在以下两种不同的场景中会发生什么 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

在java ThreadPoolExecutor中,在以下两种不同的场景中会发生什么

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开头;而且永远不会创造更多

当您了解到没有获得更多的性能/吞吐量时,您将使用第一个设置。。。当需要更多线程时。另一方面,请记住,固定大小也意味着:周围总是有5(或10)条线程。从这个意义上说,这种线程池在“静态”环境中最有意义;您的“负载”不会随时间发生重大变化。您不希望5个线程执行对10个线程有利的工作,但也不希望10个线程大部分时间处于空闲状态,因为5个线程就足够了


换句话说:这在很大程度上取决于你的整个设置;在传入流量和许多其他因素上,有多少线程可以为您提供“最佳”结果。因此,当有疑问时,你应该仔细分析;并测试更改一个变量(如最大线程数)会为您更改什么。当然,所有这些都要求您有好的方法来衡量应用程序的性能/行为。

我想补充一点,即固定大小的线程池也不会让线程在空闲时死亡。所以一个指标是,如果你期望(几乎)恒定的负载,你会选择固定的大小。如果您希望“突发”和更多线程有助于处理暂时较高的负载,那么您将使用可变大小,因此您只能暂时拥有更多线程,而“正常”负载由较少的线程处理。“如果运行的线程超过corePoolSize,但小于maximumPoolSize,则仅当队列已满时才会创建新线程。”-from。因此,在所示的可变大小线程池设置中,使用无界队列将永远不会获得高于corePoolSize的线程数。