gpt4 book ai didi

java - 在 ExecutorService 中跟踪已完成的任务

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:23:09 25 4
gpt4 key购买 nike

我正在用 Java 编写一个应用程序,它使用 ExecutorService 来运行多个线程。

我希望将多个任务(一次数千个)作为 Callables 提交给 Executor,并在完成后检索它们的结果。我处理这个问题的方法是每次调用 submit() 函数时,我都会得到一个存储在 ArrayList 中的 Future。后来我将 List 传递给一个线程,该线程不断迭代它,调用 future.get() 函数并超时以查看任务是否完成。这是正确的方法还是效率太低?

编辑 --- 更多信息 ---另一个问题是每个 Callable 需要不同的处理时间。因此,如果我简单地从 List 中取出第一个元素并对其调用 get() ,它将阻塞,而其他人的结果可能变得可用,而程序将不知道。这就是为什么我需要不断迭代超时。

提前致谢

最佳答案

is this the right approach or is to too inefficient?

这本身不是正确的方法。您不必要地遍历 ArrayList 检查任务是否完成。

这很简单:只需使用:CompletionService .您可以轻松地将现有的执行程序包装到其中。来自 JavaDocs:

Producers submit tasks for execution. Consumers take completed tasks and process their results in the order they complete.

从本质上讲,CompletionService 提供了一种只需调用take() 即可取回结果的方法。它是一个阻塞函数,调用者将阻塞直到结果可用。


关于java - 在 ExecutorService 中跟踪已完成的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16547928/

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