Параллельные потоки запускают операции над потоком в параллельном режиме. Когда вы хотите, чтобы обработка списка / записи была быстрой, поскольку для обработки данных используются несколько потоков. Также может быть случай, когда вы хотите обработать данные и вывести их в произвольной последовательности, так как обработка данных выполняется несколькими потоками, поэтому последовательность может быть любой.
list.parallelStream().forEach(System.out::println);
Параллельно потоки используют ForkJoinPool для обработки, поскольку это общий пул, используемый JVM, который может быть очень ограничительным. Вы можете до некоторой степени контролировать уровень параллелизма, наиболее эффективный способ получить уровень параллелизма - это согласование с ядрами процессора, то есть принять уровень параллелизма как 2*CPU_CORES
Как и в следующем примере, вы можете управлять параллелизмом:
final int parallelism = 10;
ForkJoinPool forkJoinPool = new ForkJoinPool(parallelism);
forkJoinPool.submit(() ->
list.parallelStream().forEach(System.out::println));
Но будьте осторожны, используя параллелизм, использование большого значения параллелизма может ухудшить производительность приложения.