Выбор ответа Senior java.util.concurrent и виртуальные потоки обновлено

Pinning виртуальных потоков

Вопрос

Что такое pinning виртуального потока в Java 21?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Виртуальный поток не может сойти с носителя при блокировке в synchronized. Обычно при блокировке виртуальный поток снимается с носителя.

Варианты ответа

  1. Виртуальный поток не может сойти с носителя при блокировке в synchronizedправильный ответ
  2. Привязка виртуального потока к конкретному ядру процессора на всё время
  3. Запрет на создание более миллиона виртуальных потоков в одной JVM
  4. Закрепление значений ThreadLocal за потоком-носителем, а не за виртуальным

Разбор

Обычно при блокировке виртуальный поток снимается с носителя. В Java 21-23 блокировка внутри synchronized (и в нативных методах) так не умеет: поток «приколот» к носителю, и при массовом ожидании носители кончаются, пропускная способность падает. Советы: ReentrantLock вместо synchronized вокруг I/O, диагностика -Djdk.tracePinnedThreads. В Java 24 synchronized исправлен (JEP 491). К ядрам CPU и лимитам числа потоков pinning отношения не имеет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме