gpt4 book ai didi

java - 通过 ExecutorCompletionService 执行时任务是否并行化?

转载 作者:行者123 更新时间:2023-11-29 07:22:59 24 4
gpt4 key购买 nike

我向 ExecutorCompletionService 提交了 5 个职位,但它似乎作业是按顺序执行的。传递给 ExecutorCompletionService 的构造函数的 ExecutorService使用 newCacheThreadPool 形式创建。我做错了什么吗?

更新 每个作业基本上都是在进行数据库查询和一些计算。 ExecutorCompletionService 的代码按原样从 javadoc 中提取。我只是用我自己的自定义 Callable 实现替换了 Callable。

最佳答案

ExecutorCompletionService 与作业的执行方式无关,它只是一种检索结果的便捷方式。

Executors.newCachedThreadPool 默认情况下在单独的线程中执行任务,这些任务可以是并行的,前提是:

  • 任务是独立的,例如在同一个对象上同步;
  • 您有多个硬件 CPU 线程。

最后一点值得解释。虽然没有保证,但实际上 Sun JVM 偏爱当前正在执行的线程,因此它永远不会换成另一个线程。这意味着您的 5 个任务可能由于 JVM 实现而最终被串行执行,并且没有例如多核机器。

关于java - 通过 ExecutorCompletionService 执行时任务是否并行化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1049737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com