我有一个要求,我需要处理当前直播节目的一些任务。 这是一项计划任务,每分钟运行一次。
在任何给定的时刻,可以有任意数量的现场表演(虽然数字不能那么大,大约10 )。 所有现场表演都需要完成20多个功能。或者说有20个工人班,都在做那个工作。
让我们说第一个功能,有5个节目,然后几分钟显示减少到2,然后几分钟后显示增加到7 。
目前我正在做这样的事情,
int totalShowsCount = getCurrentShowsCount();
ExecutorService executor = Executors.newFixedThreadPool(showIds.size());
以上陈述每分钟都会执行一次。
问题陈述
1。)上面的操作多贵啊?? ??每隔一分钟创建一次fixedThreadPool。
2.。)我可以做些什么来优化我的解决方案,如果我使用固定的线程池,比如说(10),可能是3或5或6,或者在任何给定的分钟内使用任意数量的线程。
我可以在工作级别创建一个固定的线程池,并维护它 利用它。
仅供参考,如果有更好的方法,可以使用Java8。
答案 0 :(得分:3)
上述操作多贵啊?? ??每隔一分钟创建一次fixedThreadPool。
创建线程池是一项相对昂贵的操作,可能需要几毫秒。你不想每秒多次这样做。
对于计算机来说,第二个是永恒的,如果你有一台36核计算机,它可以在这段时间内执行多达1000亿条指令。一分钟是非常非常长的时间,如果你每分钟只做一次,你甚至可以每分钟重新启动你的JVM并仍然获得合理的吞吐量。
我可以做些什么来优化我的解决方案,如果我使用固定的线程池,比方说(10),或者可能是3或5或6,或者在任何给定的分钟内使用任意数量的线程。
可能,这取决于你在做什么。没有大多数分析,你可以肯定地说。注意:如果您正在使用parallelStream(),如果不是,您应该看看是否可以,您可以使用内置的ForkJoinPool.commonPool()
而不需要创建另一个池。但同样,这取决于你在做什么。