java - 多个 ScheduledExecutorServices 或一个具有用于固定速率任务的线程池的服务

标签 java multithreading

考虑一个假设的情况,其中多个任务将以固定速率永久运行。只要应用程序运行,这些任务的数量就不会改变。对于这种情况,像这样创建一个包含n个任务的线程池有什么区别

ScheduledExecutorService executorService = Executors.newScheduledThreadPool(n);
for (int i = 0; i < n; i++) {
    executorService.scheduleAtFixedRate(job, 0, 5, TimeUnit.MINUTES);
}

并为每个任务创建单个执行器,如下所示?

for (int i = 0; i < n; i++) {
    ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(job, 0, 5, TimeUnit.MINUTES);
}

如果有任何差异,应该首选哪一个,为什么?

注意:除了创建多个执行器实例

最佳答案

执行器旨在处理线程池。因此,您不需要使用单个线程创建 N 个执行器,因为最终会得到 N 个执行器实例和 N 个线程。只需持有一个处理 N 个线程的 Executor,您就可以通过 1 个执行器和 N 个线程节省一些内存。

关于java - 多个 ScheduledExecutorServices 或一个具有用于固定速率任务的线程池的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60098481/

相关文章:

java - Haskell 的类型系统是否遵循 Liskov 替换原则?

java - 异常抛出或捕获并尝试

java - 内存不足错误: unable to create new native thread while using Executor

java - Java线程间共享对象的最佳实践或原则

java - 您什么时候想使用两个缓存的线程池?

multithreading - Kotlin:使用非阻塞I/O阻塞协程

java - 在请求正文中传递字符串时出现问题

java - 什么反序列化 GWT RPC 调用客户端

java - Return 语句无法从循环中正常工作

java - 如何调度 Java 线程