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 подскажет развёрнутый ответ в реальном времени.