我正在开发一个多线程应用程序,并出于我的目的使用 ExecutorCompletionService。到目前为止,该应用程序运行良好,没有任何问题。但是有一个特定的场景——假设有n个线程在运行,并且由于某种原因,一些线程稍后完成了处理,在这种情况下,如何确保程序使用所有处理线程生成的结果。我正在使用此类的take()方法。但是我想了解是否有更好的方法。理想情况下,我正在寻找一种解决方案,通过该解决方案可以查询存储未完成任务的数据结构。由于我无法创建场景(这可能需要一些时间,因为我需要进行某种一次性测试编码),因此在论坛中寻找建议。问候,
问问题
71 次
1 回答
0
如何确保程序使用所有处理线程生成的结果。
我假设您在问消费者如何ExecutorCompletionService
知道他们何时消费了最后一个任务?通常,您计算提交给的作业数量,ExecutorService
然后在您将那么多作业出列后停止从完成服务中获取。
如果您有大量无法一次全部排队的作业,则可以有一个计数器和一个boolean done
状态字段。因此,当为真且作业计数器匹配时,ExecutorCompletionService
将完成。done
private class CompletedJobInfo {
ExecutorCompletionService service;
boolean done;
int submittedCount;
}
于 2013-07-22T20:53:51.310 回答