Выбор ответа Senior java.util.concurrent и виртуальные потоки обновлено
Pinning виртуальных потоков
Вопрос
Что такое pinning виртуального потока в Java 21?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Виртуальный поток не может сойти с носителя при блокировке в synchronized. Обычно при блокировке виртуальный поток снимается с носителя.
Варианты ответа
- Виртуальный поток не может сойти с носителя при блокировке в synchronizedправильный ответ
- Привязка виртуального потока к конкретному ядру процессора на всё время
- Запрет на создание более миллиона виртуальных потоков в одной JVM
- Закрепление значений ThreadLocal за потоком-носителем, а не за виртуальным
Разбор
Обычно при блокировке виртуальный поток снимается с носителя. В Java 21-23 блокировка внутри synchronized (и в нативных методах) так не умеет: поток «приколот» к носителю, и при массовом ожидании носители кончаются, пропускная способность падает. Советы: ReentrantLock вместо synchronized вокруг I/O, диагностика -Djdk.tracePinnedThreads. В Java 24 synchronized исправлен (JEP 491). К ядрам CPU и лимитам числа потоков pinning отношения не имеет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «java.util.concurrent и виртуальные потоки»
- Что выведет: цепочка CompletableFuture
- В каком потоке выполнится thenApply
- Гонка на ConcurrentHashMap
- Рекурсия в computeIfAbsent
- null в ConcurrentHashMap
- CompletableFuture без executor
- Опасность newFixedThreadPool
- CountDownLatch и CyclicBarrier