我有一个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