[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-11-25-chto-takoe-virtual-threads-project-loom":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},409,"chto-takoe-virtual-threads-project-loom",11,"java-11-25","Java 11–25","🆕","Что такое Virtual Threads (Project Loom)?","Virtual Threads — лёгкие потоки, управляемые JVM, а не операционной системой. Позволяют создавать миллионы потоков без значительных затрат памяти, решая проблему масштабирования блокирующего I\u002FO.\n\n> **Аналогия из жизни:** platform threads — это такси (каждая машина стоит дорого, их количество ограничено), virtual threads — это велосипеды (дешёвые, можно выдать каждому). Когда велосипедист останавливается на светофоре (I\u002FO), велосипед не занимает дорогу — другие могут проехать.\n\n### Platform Threads vs Virtual Threads\n\n| Критерий | Platform Thread | Virtual Thread |\n|----------|----------------|----------------|\n| Стек | ~1 MB (фиксированный) | ~несколько KB (динамический) |\n| Создание | Дорого (syscall) | Дёшево (объект JVM) |\n| Количество | Тысячи | Миллионы |\n| Планирование | ОС | JVM (ForkJoinPool) |\n| Блокирующий I\u002FO | Блокирует поток ОС | Отпускает carrier thread |\n| CPU-bound | Эффективен | Не даёт преимущества |\n\n\u003Cdetails>\u003Csummary>Пример: создание и использование Virtual Threads\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Создание Virtual Thread\nThread vThread = Thread.ofVirtual().start(() -> {\n    System.out.println(\"Running in: \" + Thread.currentThread());\n});\n\n\u002F\u002F С именем\nThread.ofVirtual().name(\"my-vthread\").start(() -> {\n    \u002F\u002F ...\n});\n\n\u002F\u002F ExecutorService с Virtual Threads\ntry (var executor = Executors.newVirtualThreadPerTaskExecutor()) {\n    for (int i = 0; i \u003C 100_000; i++) {\n        executor.submit(() -> {\n            Thread.sleep(Duration.ofSeconds(1));\n            return fetchData();\n        });\n    }\n} \u002F\u002F executor.close() ждёт завершения всех задач\n\n\u002F\u002F Spring Boot — одна строка конфигурации\n\u002F\u002F application.yml:\n\u002F\u002F spring:\n\u002F\u002F   threads:\n\u002F\u002F     virtual:\n\u002F\u002F       enabled: true\n```\n\n\u003C\u002Fdetails>\n\n### Когда использовать\n\n| Сценарий | Рекомендация |\n|----------|-------------|\n| I\u002FO-bound (HTTP, БД, файлы) | Virtual Threads |\n| Высокая конкурентность (тысячи соединений) | Virtual Threads |\n| Замена реактивного стека | Virtual Threads (для 80% сценариев) |\n| CPU-bound вычисления | Platform Threads \u002F ForkJoinPool |\n| Код с `synchronized` + I\u002FO (pinning) | Заменить на `ReentrantLock` |\n\n### Частые ошибки\n\n- Пул Virtual Threads — `Executors.newFixedThreadPool()` с Virtual Threads бессмысленно; используйте `newVirtualThreadPerTaskExecutor()`\n- ThreadLocal с Virtual Threads — при миллионе потоков ThreadLocal потребляет огромное количество памяти; используйте ScopedValues\n- `synchronized` с I\u002FO — pinning; замените на `ReentrantLock`\n- Ожидать ускорение CPU-bound задач — Virtual Threads не добавляют ядра\n\n### Как используется в 2026\n\n- Spring Boot 3.2+ — `spring.threads.virtual.enabled=true` для MVC на Virtual Threads\n- Tomcat, Jetty, Undertow поддерживают Virtual Threads\n- JDBC-драйверы (PostgreSQL, MySQL) работают без pinning (заменили `synchronized` на `ReentrantLock`)\n- Virtual Threads + блокирующий код = альтернатива WebFlux для 80% сценариев\n\n> **На собеседовании:** объясните проблему platform threads (1 MB стек, лимит тысячи потоков), как virtual threads решают её (несколько KB, миллионы потоков), и обязательно упомяните pinning (synchronized + I\u002FO блокирует carrier thread). Частая ошибка — сказать, что Virtual Threads ускоряют CPU-bound задачи.","","middle",[15],"java-modern",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое Virtual Threads (Project Loom)? — Gymterview","Virtual Threads — лёгкие потоки, управляемые JVM, а не операционной системой. Позволяют создавать миллионы потоков без значительных затрат памяти, решая проблем","Virtual Threads — лёгкие потоки, управляемые JVM, а не операционной системой. Позволяют создавать миллионы потоков без з",[15,13],"Virtual Threads — лёгкие потоки, управляемые JVM, а не операционной системой. Позволяют создавать миллионы потоков без значительных затрат памяти, решая проблему масштабирования блокирующего I\u002FO.",true]