Параллельные стримы в java позволяет выполнять операции над элементами последовательности параллельно, то есть в несколько потоков. Это может ускорить выполнение операций в ситуациях, когда операции можно разбить на независимые части и обработать их параллельно.
Параллельные стримы подходят для данных, операции над которыми не зависят друг от друга и могут быть выполнены независимо. Также параллельность стоит использовать на большом количестве элементов, так как обрабатываемые элементы необходимо поделить между потоками, а затем собрать воедино результат каждого выполненного задания. На небольшом количестве элементов это может отрицательно влиять на скорость.
Пример:
Данный код параллельно вычисляет сумму всех элементов списка numbersList.
Parallel Stream использует общий пул потоков. Этот пул потоков обычно имеет размер, равный количеству процессорных ядер на машине - 1. Однако его размер может быть изменен через аргументы запуска JVM:
-Djava.util.concurrent.ForkJoinPool.common.parallelism=4
Так как parallel Stream использует общий пул потоков, может возникнуть потребность в создании изолированного пула. В следующем примере параллельный поток использует собственный ThreadPool для вычисления суммы элементов numbersList: