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