跟踪任务未在执行程序框架中完成

时间:2013-07-22 20:37:21

标签: java multithreading

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

1 个答案:

答案 0 :(得分:0)

  

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

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

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

private class CompletedJobInfo {
    ExecutorCompletionService service;
    boolean done;
    int submittedCount;
}