循环使用与ExecutorCompletionService不同的期货

时间:2016-11-03 00:01:14

标签: java multithreading concurrency

responseFromAllThreads () {
    Collection <String> response;
    String result;
    for (Future f : futuresList) { //java.util.concurrent.Future
       result = (String) f.get();
       response.add(result);
    }
  return response;
}

当我拨打responseFromAllThreads()时,我希望我的回复能保证包含所有期货的相应结果。但相反,每隔一段时间,我就会发现responseFromAllThreads返回的响应集合中的任务结果重复!来自java docs f.get() "Waits if necessary for the computation to complete, and then retrieves its result."

当我使用ExecutorCompletionService时,回复收集似乎始终正常。请有人解释为什么它不能直接循环使用期货,以及它是否是使用ExecustionCompletionService的正确措施?

感谢。

0 个答案:

没有答案