[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-8-rasskazhite-o-parallelnoy-obrabotke-v-java-8":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},371,"rasskazhite-o-parallelnoy-obrabotke-v-java-8",10,"java-8","Java 8+","☕","Расскажите о параллельной обработке в Java 8","Параллельные стримы позволяют автоматически распределить обработку данных по нескольким ядрам процессора. Данные разбиваются на части, каждая часть обрабатывается в отдельном потоке, а затем результаты объединяются. Под капотом используется общий `ForkJoinPool` (доступен через `ForkJoinPool.commonPool()`).\n\n### Создание параллельного стрима\n\n```java\n\u002F\u002F Из коллекции\ncollection.parallelStream();\n\n\u002F\u002F Из существующего стрима\nstream.parallel();\n\n\u002F\u002F Проверка\nstream.isParallel(); \u002F\u002F true\u002Ffalse\n```\n\n### Переключение между режимами\n\n```java\ncollection.stream()\n    .peek(...)        \u002F\u002F последовательно\n    .parallel()\n    .map(...)         \u002F\u002F параллельно\n    .sequential()\n    .reduce(...);     \u002F\u002F последовательно\n```\n\n### Когда параллельные стримы эффективны\n\n| Фактор | Хорошо | Плохо |\n|--------|--------|-------|\n| Размер данных | Большие объёмы (>10K элементов) | Малые объёмы |\n| Структура данных | `ArrayList`, массивы (легко разбить) | `LinkedList` (трудно разбить) |\n| Тип данных | Примитивы | Объекты с тяжёлым autoboxing |\n| Тип операций | Короткие CPU-bound операции | Долгие I\u002FO операции, блокировки |\n| Порядок | Не важен | Важен (`forEachOrdered` добавляет overhead) |\n\n### Важные ограничения\n\n- Все параллельные стримы в JVM делят один `ForkJoinPool` — долгая операция в одном стриме может заблокировать другие\n- Для сохранения порядка используйте `forEachOrdered()` вместо `forEach()`\n- `unordered()` может повысить производительность, если порядок не важен\n- На одноядерной машине параллельный стрим выполняется последовательно\n\n\u003Cdetails>\n\u003Csummary>Пример с unordered\u003C\u002Fsummary>\n\n```java\ncollection.parallelStream()\n    .sorted()\n    .unordered()\n    .collect(Collectors.toList());\n```\n\n\u003C\u002Fdetails>\n\n> **На собеседовании:** не говорите, что параллельные стримы «всегда быстрее». Интервьюер ожидает понимания компромиссов: overhead на разбиение и объединение данных, общий `ForkJoinPool`, проблемы с `LinkedList`. Золотое правило — измерять (benchmark), а не угадывать.","","middle",[15],"java8",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Расскажите о параллельной обработке в Java 8 — Gymterview","Параллельные стримы позволяют автоматически распределить обработку данных по нескольким ядрам процессора. Данные разбиваются на части, каждая часть обрабатывает","Параллельные стримы позволяют автоматически распределить обработку данных по нескольким ядрам процессора. Данные разбива",[15,13],"Параллельные стримы позволяют автоматически распределить обработку данных по нескольким ядрам процессора. Данные разбиваются на части, каждая часть обрабатывается в отдельном потоке, а затем результаты объединяются. Под капотом используется общий `ForkJoinPool` (доступен через `ForkJoinPool.commonPo",true]