Hardvirtual-threadsjava21
Что такое виртуальные потоки (Virtual Threads, Java 21)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Virtual threads (Project Loom, Java 21) — лёгкие потоки, управляемые JVM, а не ОС. Создание: Thread.startVirtualThread(r) или Executors.newVirtualThreadPerTaskExecutor(). Миллионы возможно, каждый ~few KB.
// Синхронный код, как один поток на запрос, но эффективно
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i ->
executor.submit(() -> {
var resp = httpClient.send(req); // блокирует, но виртуальный
return resp.body();
})
);
}- Когда virtual thread блокируется (I/O, sleep, lock) — JVM «припаркует» его, carrier thread переиспользуется;
- Идеально для I/O-bound (HTTP servers, DB calls);
- Не для CPU-bound (всё равно ограничены числом ядер);
synchronizedдержит carrier thread — предпочитатьReentrantLock(JEP 491 в Java 24 решает);- Pinning — virtual thread прикреплён к carrier во время synchronized/native frames;
ThreadLocalможет протекать — рекомендуется Scoped Values (preview).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.