Java Executors.newFixedThreadPool()-此操作的成本有多高

Java Executors.newFixedThreadPool()-此操作的成本有多高,java,performance,executorservice,Java,Performance,Executorservice,我有一个要求,我需要处理当前直播节目的一些任务。 这是一个计划任务,每分钟运行一次 在任何给定的时刻,都可以有任意数量的直播节目(尽管数量不能太大,大约最多10场)所有直播节目都需要完成20多项功能。或者说那里有20个工人阶级,他们都在那里工作 比如说,对于第一个功能,有5个节目,然后几分钟后节目减少到2个,然后再几分钟后节目增加到7个 现在我在做这样的事情 int totalShowsCount = getCurrentShowsCount(); ExecutorService executo

我有一个要求,我需要处理当前直播节目的一些任务。 这是一个计划任务,每分钟运行一次

在任何给定的时刻,都可以有任意数量的直播节目(尽管数量不能太大,大约最多10场所有直播节目都需要完成20多项功能。或者说那里有20个工人阶级,他们都在那里工作

比如说,对于第一个功能,有5个节目,然后几分钟后节目减少到2个,然后再几分钟后节目增加到7个

现在我在做这样的事情

int totalShowsCount = getCurrentShowsCount();
ExecutorService executor = Executors.newFixedThreadPool(showIds.size());
上述语句每分钟执行一次

问题陈述

1.)上述操作的成本是多少。。??。每分钟创建一个fixedThreadPool

2.)我该如何优化我的解决方案,我应该使用一个固定的线程池,比如(10),可能是3个、5个、6个或任意数量的线程在任何给定的时间被利用

我是否可以在工作线程级别创建一个固定线程池,并对其进行维护 利用这一点

仅供参考,如果有更好的方法可用,请使用Java8

以上操作的费用是多少。。??。每分钟创建一个fixedThreadPool

创建线程池是一个相对昂贵的操作,可能需要毫秒。你不想每秒做很多次

一秒钟对一台计算机来说是永恒的,如果你有一台36核的机器,它可以在这段时间内执行多达1000亿条指令。一分钟是非常非常长的时间,如果您每分钟只做一次,您甚至可以每分钟重新启动JVM,并且仍然可以获得合理的吞吐量

我应该使用一个固定的线程池,比如说(10个),可能是3个、5个、6个或任意数量的线程在任何给定的时间被利用,我可以做些什么来优化我的解决方案呢


可能,这取决于你在做什么。没有大多数分析,你可以肯定地说。注意:如果您使用的是parallelStream(),如果不是,您应该看看是否可以,您可以使用内置的
ForkJoinPool.commonPool()
,而无需创建另一个池。但是,这同样取决于您正在做什么。

为什么您每分钟都要重新创建一个新的
Executor Service
?难道不可能一次实例化(在启动时)并每次重复使用吗?@发现我有20名员工,每个员工都有自己的工作,我想为所有员工创建单独的池-我应该。。??如果我为所有工作线程创建公共池,可能是因为我的工作线程消耗更多线程,所有工作线程每分钟都会启动,可能是因为我的一个工作线程没有任何线程。为什么不使用一个可调整大小的池(
Executors.newCachedThreadPool
)?