等待来自Java执行程序的至少一个结果而不用繁忙等待

时间:2014-05-30 08:40:07

标签: java multithreading concurrency future futuretask

我有一个Future任务列表

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

虽然这些正在执行,但我希望从中获得结果项目。 但是,我怎样才能在没有循环的情况下完成它并检查futuretask是否完成,然后得到它的结果?

for (int i = 0; i < futureList.size(); i++) {
                    if (futureList.get(i).isDone()) {
    .....
}}

我考虑过制作一些额外的通知等待结构,但我仍然必须知道哪个线程已完成,因此它无法帮助我避免一直循环。 有什么建议吗?

1 个答案:

答案 0 :(得分:7)

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