У нас есть три разных метода многопоточности в java - Вилочный/Объединенный пул, Служба Executor и CountDownLatch
Вилка/объединение пула (http://www.javacodegeeks.com/2011/02/java-forkjoin-parallel-programming.html)
Структура Fork/Join предназначена для того, чтобы алгоритмы разделения и управления легко распараллеливались. Этот тип алгоритмов идеально подходит для проблем, которые можно разделить на две или более подзадачи того же типа. Они используют рекурсию, чтобы разбить проблему на простые задачи, пока они не станут достаточно простыми, чтобы их можно было решить напрямую. Затем решения подсуммов объединяются, чтобы дать решение исходной задачи
ExecutorService - это интерфейс, расширяющий класс Executor и представляющий асинхронное выполнение. Он предоставляет нам механизмы для управления концом и обнаружения прогресса асинхронных задач.
invokeAll(): Выполняет заданные задачи, возвращая список фьючерсов, сохраняющих их статус и результаты, когда все завершено. Future.isDone() истинно для каждого элемента возвращаемого списка.
CountDownLatch:(http://examples.javacodegeeks.com/core-java/util/concurrent/countdownlatch-concurrent/java-util-concurrent-countdownlatch-example/)
CountDownLatch используется в синхронизации, позволяя одному или нескольким потокам дождаться завершения набора операций в других потоках.
Мое предположение:
В обоих этих альтернативах конечный результат будет известен только после завершения всех задач/потоков.
Являются ли эти три альтернативы бесплатными или дополняющими друг друга?