← Назад к вопросам
Бывает ли 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 по умолчанию однопоточный, параллелизм нужно включать явно.