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 подскажет развёрнутый ответ в реальном времени.