0

我正在开发一个多线程应用程序,并出于我的目的使用 ExecutorCompletionService。到目前为止,该应用程序运行良好,没有任何问题。但是有一个特定的场景——假设有n个线程在运行,并且由于某种原因,一些线程稍后完成了处理,在这种情况下,如何确保程序使用所有处理线程生成的结果。我正在使用此类的take()方法。但是我想了解是否有更好的方法。理想情况下,我正在寻找一种解决方案,通过该解决方案可以查询存储未完成任务的数据结构。由于我无法创建场景(这可能需要一些时间,因为我需要进行某种一次性测试编码),因此在论坛中寻找建议。问候,

4

1 回答 1

0

如何确保程序使用所有处理线程生成的结果。

我假设您在问消费者如何ExecutorCompletionService知道他们何时消费了最后一个任务?通常,您计算提交给的作业数量,ExecutorService然后在您将那么多作业出列后停止从完成服务中获取。

如果您有大量无法一次全部排队的作业,则可以有一个计数器和一个boolean done状态字段。因此,当为真且作业计数器匹配时,ExecutorCompletionService将完成。done

private class CompletedJobInfo {
    ExecutorCompletionService service;
    boolean done;
    int submittedCount;
}
于 2013-07-22T20:53:51.310 回答