Если мы используем ExecutorCompletionService , мы можем отправить серию задач как Callable
s и получить результат, взаимодействующий с CompletionService
как queue
.
Но есть также invokeAll
из ExecutorService
, который принимает Collection
задач, и мы получаем список Future
для получения результатов.
Насколько я могу судить, нет никакого преимущества в использовании одного или другого (, за исключением того, что мы избегаем цикла for
с использованием invokeAll
, который нам пришлось бы submit
выполнять задачи вCompletionService
)и по сути это одна и та же идея с небольшой разницей.
Итак, почему существует 2 разных способа отправки серии задач? Правильно ли я понимаю, что по производительности они эквивалентны? Есть ли случай, когда один больше подходит, чем другой? Я не могу думать ни об одном.