ExecutorCompletionService? Зачем он нужен, если у нас есть invokeAll?

Если мы используем ExecutorCompletionService , мы можем отправить серию задач как Callables и получить результат, взаимодействующий с CompletionServiceкак queue.

Но есть также invokeAllиз ExecutorService, который принимает Collectionзадач, и мы получаем список Futureдля получения результатов.

Насколько я могу судить, нет никакого преимущества в использовании одного или другого (, за исключением того, что мы избегаем цикла forс использованием invokeAll, который нам пришлось бы submitвыполнять задачи вCompletionService)и по сути это одна и та же идея с небольшой разницей.

Итак, почему существует 2 разных способа отправки серии задач? Правильно ли я понимаю, что по производительности они эквивалентны? Есть ли случай, когда один больше подходит, чем другой? Я не могу думать ни об одном.

36
задан Basil Bourque 29 June 2014 в 07:00
поделиться