← Назад к вопросам

Бывает ли Stream однопоточным?

1.8 Middle🔥 111 комментариев
#Stream API и функциональное программирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Однопоточность Stream в Java

Да, Stream может быть однопоточным. Это важный момент, который часто упускают.

Sequential Stream (по умолчанию)

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = numbers.stream()
    .filter(n -> n > 2)
    .map(n -> n * 2)
    .collect(Collectors.toList());

Этот код выполняется однопоточно, в текущем потоке. Stream обрабатывает элементы последовательно в одном потоке выполнения.

Параллельный Stream

Если вы хотите многопоточность, нужно явно вызвать parallel():

List<Integer> result = numbers.parallelStream()
    .filter(n -> n > 2)
    .map(n -> n * 2)
    .collect(Collectors.toList());

Он использует ForkJoinPool для параллельной обработки.

Когда использовать

  • Sequential: маленькие коллекции, простые операции, нужен порядок
  • Parallel: большие коллекции (1000+), heavy computations, порядок не важен

Морально: Stream по умолчанию однопоточный, параллелизм нужно включать явно.

Бывает ли Stream однопоточным? | PrepBro