Concurrent/parallel reduce

parallel

При обработки данных (напр. в stream) задает свойство возможности свертки исходного датасета по кусочкам и мерж их в один.

В stream API может быть использован как в reduce (возвращает НОВЫЙ склееный элемент), так и в collect (модифицирует один из переданных аргументов и возвращает его).

В пределах одного потока используется только один результирующий контейнер, и при завершении операций в данном потоке передается (merge/combiner) в другой поток для объединения результата.

parallel потоки не зависимы друг от друга.

concurrent

При обработки данных (напр. в stream) задает свойство возможности свертки исходного датасета в не уникальный для каждого воркера результирующий контейнер.

В stream API может быть использован в collect(Collector), с заданными свойствами CONCURRENT и UNORDERED (для независимости от порядка добавления).

Для нескольких потоков есть возможность складывания результата в один и тот же результирующий контейнер (через метод accumulator), и вызов создания контейнера (метод supplier) вызывается один раз (~ возможно и больше)

concurrent потоки работают с разделяемым ресурсом.