Virtual Threads (Java 21): pinning problem?

Ответ

Virtual Thread на synchronized блоке → pinning (привязка к platform thread, теряется лёгкость). Причина: synchronized работает через монитор объекта, JVM не может «припарковать» виртуальный поток, и carrier простаивает. Решение — заменить synchronized на ReentrantLock.

Разбор: Pinning — это привязка виртуального потока к несущему platform-потоку, когда внутри synchronized он блокируется: JVM не может отпарковать поток с занятого монитора, и carrier простаивает. Ловушка в причине — дело именно в мониторе synchronized (и нативных вызовах), а не в CPU-вычислениях или штатном I/O; обычные блокирующие операции через JDK как раз корректно отпарковываются.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться