Проверяет понимание подводных камней параллельных стримов.
Нет гарантии порядка обработки элементов.
Накладные расходы на синхронизацию (медленнее на малых данных).
Проблемы с shared state (например, несинхронизированные коллекции).
Последовательный стрим: [A, B, C] → [A1, B1, C1].
Параллельный стрим: [A, B, C] → [B1, A1, C1].
Маленькие данные: Параллелизм может быть медленнее из-за накладных расходов.
Пример:
List<Integer> numbers = List.of(1, 2, 3);
// Неэффективно:
numbers.parallelStream().map(x -> x * 2).toList();Ошибка:
List<Integer> unsafeList = new ArrayList<>();
IntStream.range(0, 1000).parallel().forEach(unsafeList::add); // Race condition!Решение: Использовать потокобезопасные коллекции (Collectors.toList()).
Вывод:
Параллельные стримы полезны для больших данных и CPU-интенсивных задач.