我有一个Future任务列表

   futureList.add(executor.submit(new Callable(someList)));

在执行这些命令的同时,我想从中取出结果项。
但是,如何在不循环遍历它并检查futuretask是否完成,然后获得其结果的情况下进行制作呢?
for (int i = 0; i < futureList.size(); i++) {
                    if (futureList.get(i).isDone()) {
    .....
}}

我考虑过要制作一些其他的notify-wait结构,但是我仍然必须知道哪个线程完成了,因此这无助于我一直避免循环。
有什么建议吗?

最佳答案

使用ExecutorCompletionService,它正是为此目的而设计的,请参阅API http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorCompletionService.html

10-01 05:32