Все самое полезное для Java-разработчика в одном канале.
Учиться у нас: clc.to/AATM8w
Для обратной связи: @proglibrary_feeedback_bot
По рекламе: @tproger_sales_bot
РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Post #7853
2.23K
🔗 Что такое pinning виртуального потока
Виртуальный поток обычно отцепляется от carrier thread, когда блокируется на операции ожидания. Но в некоторых ситуациях он может остаться привязанным к платформенному потоку — это называется pinning.
Классические причины:
🔘 блокирующая операция внутри synchronized;
🔘 выполнение native-кода через JNI.
Почему это важно?
🤔 А что с synchronized?
Начиная с Java 24, JVM изменила реализацию мониторов так, чтобы блокировка внутри synchronized больше не приводила к pinning виртуального потока в прежних сценариях.
Поэтому старый совет «везде заменить synchronized на ReentrantLock» уже неактуален.
🤩 А вот долгие блокирующие вызовы в native-коде всё ещё стоит учитывать при использовании виртуальных потоков.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
Виртуальный поток обычно отцепляется от carrier thread, когда блокируется на операции ожидания. Но в некоторых ситуациях он может остаться привязанным к платформенному потоку — это называется pinning.
Классические причины:
🔘 блокирующая операция внутри synchronized;
🔘 выполнение native-кода через JNI.
Почему это важно?
Пока виртуальный поток pinned, carrier thread не может нормально использоваться для выполнения других виртуальных потоков.
🤔 А что с synchronized?
Начиная с Java 24, JVM изменила реализацию мониторов так, чтобы блокировка внутри synchronized больше не приводила к pinning виртуального потока в прежних сценариях.
Поэтому старый совет «везде заменить synchronized на ReentrantLock» уже неактуален.
🤩 А вот долгие блокирующие вызовы в native-коде всё ещё стоит учитывать при использовании виртуальных потоков.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
- 👍 9
- ❤ 2








