Этап 6 из 11 · ≈ 4 ч

Виртуальные потоки

Основа с Middle

Project Loom — миллионы лёгких потоков для блокирующего кода.

Что важно знать

  • Виртуальный поток дешёвый: блокирующий вызов освобождает поток-носитель.
  • Подходят для ожидания ввода-вывода, не ускоряют вычисления.
  • Пул соединений к базе остаётся ограничением.
  • С JDK 24 synchronized больше не закрепляет поток на носителе.

Критерии освоения

Middle ≈ 4 ч

  • Объясняет, чем виртуальные потоки отличаются от платформенных и для каких задач подходят

Практика. Переписать сервис с пулом потоков для HTTP-вызовов на виртуальные потоки и сравнить пропускную способность.

Senior ≈ 4 ч

  • Знает ограничения — закрепление при synchronized до JDK 24, пулы ресурсов, ThreadLocal — и оценивает переход сервиса

Практика. Оценить перевод Spring Boot сервиса на виртуальные потоки — узкие места, пулы соединений, риски.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Чем виртуальный поток отличается от обычного платформенного?Junior

Виртуальный поток — лёгкий поток под управлением JVM, а не ОС: создание и блокировка стоят копейки, их можно держать миллионами.

Полный разбор
Что верно про практическое применение виртуальных потоков?Middle

Не пулить (поток на задачу), применять для блокирующего ввода-вывода, помнить, что ThreadLocal на миллионах потоков дорог, и ограничивать доступ к внешним ресурсам семафором — пул соединений к БД от виртуальных потоков не вырастет.

Полный разбор
Что такое pinning виртуального потока и в каких случаях он всё ещё возможен в актуальных версиях Java?Senior

Pinning — виртуальный поток при блокировке не может отцепиться от несущего, и тот простаивает. До JDK 24 главная причина — блокировка внутри synchronized; JEP 491 (JDK 24) это убрал. Остаются нативные кадры (JNI, вызовы через Foreign API) в стеке.

Полный разбор
Что происходит с виртуальным потоком, когда он выполняет блокирующий сетевой вызов?Middle

Unmount: стек виртуального потока (continuation) сохраняется в куче, несущий поток освобождается для других задач. Когда данные пришли — mount обратно, возможно на другой несущий поток.

Полный разбор
Почему задачи отдают в пул потоков, а не создают поток на каждую?Junior

Пул переиспользует потоки и ограничивает их число: создание потока дорого, а неограниченный рост убивает приложение.

Полный разбор
Что представляет собой объект Future?Junior

Future — ссылка на результат, который появится позже: можно проверить готовность, дождаться значения или отменить задачу.

Полный разбор

Разборы темы

← Вся карта «Java»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования