java - Executors.newFixedThreadPool() - 这个操作有多昂贵

标签 java performance executorservice

我有一个要求,我需要处理一些当前现场表演的任务。 这是一个计划任务,每分钟运行一次。

在任何给定的时刻,可以有任意数量的现场表演(尽管数量不能那么大,大约最多 10)。 所有的直播节目需要完成20多个功能。或者说那里有 20 个 worker 类(Class),所有人都在那里工作

假设第一个功能有 5 个节目,几分钟后节目减少到 2 个,几分钟后节目再次增加到 7 个

目前我正在做这样的事情,

int totalShowsCount = getCurrentShowsCount();
ExecutorService executor = Executors.newFixedThreadPool(showIds.size());

上述语句每分钟执行一次。

问题陈述

1.) 上面的操作要花多少钱......??。在给定的每一分钟创建 fixedThreadPool。

2.) 我可以做些什么来优化我的解决方案,我应该使用一个固定的线程池,比如 (10),并且可能在任何给定的分钟使用 3、5、6 或任意数量的线程。

Can i create a fixed thread pool at worker level, and maintain it and utilize that.

仅供引用,使用 Java8,如果有更好的方法可用。

最佳答案

How much expensive the above operation be..??. Creating fixedThreadPool at every given minute.

创建线程池是一项相对昂贵的操作,可能需要几毫秒。您不希望每秒执行多次此操作。

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

What can i do to optimize my solution, should i use a fixed thread pool, say (10), and maybe 3 or 5 or 6 or any number of threads getting utilized at any given minute.

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

关于java - Executors.newFixedThreadPool() - 这个操作有多昂贵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35837400/

相关文章:

Android线程完成回调

java - 生产者-消费者:如何知道生产完成

java - ExecutorService 是否在超出范围时收集垃圾?

java - 未重新绘制的图

java - Oracle 的 Java 7 for Mac OS X 是否有 com.apple.eawt.CocoaComponent 或类似组件?

iphone - UITableView reloadData 多次导致内存泄漏并减慢应用程序

java - ExecutorService.Submit(Callable<T>) 正在为 Future<T> 对象返回空值

java - 为什么我的 Java 应用程序被杀死了?

java - 使用 SimpleXML 很容易解决问题。我做错了什么?

python - 比较两个文件中的 x、y、z 坐标