Mediumparallel-stream
Что такое Stream.parallelStream()?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
parallelStream() — Stream, обрабатываемый параллельно через ForkJoinPool.commonPool(). Данные делятся (Spliterator.trySplit), обрабатываются в разных потоках, результаты объединяются.
// Для stateless, associative, non-interfering операций
long sum = list.parallelStream()
.filter(x -> x > 0)
.mapToLong(x -> x)
.sum(); // reduce с combinerОграничения:
- не использовать shared mutable state;
collect/reduceтребуют combiner (объединение частичных результатов);commonPool— общий ресурс, не для blocking I/O (всё заблокируется);- side effects (
peek,forEach) могут выполняться в любом потоке; - для маленьких задач overhead > benefit (threshold ~10000 элементов).
Кастомный pool: customPool.submit(() -> list.parallelStream()...).get(). Не «ускоряет автоматически» — нужен benchmark.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.