Виртуальные потоки появились в Java 21 как лёгкая альтернатива потокам ОС.
До Java 23 им мешало одно ограничение: при входе в
synchronized поток пинился — то есть блокировал поток-носитель до выхода из блока.Это снижало масштабируемость и мешало использовать
synchronized в коде с блокирующими операциями:synchronized byte[] getData() {
return socket.getInputStream().read(...);
}Даже в ожидании входа в блок поток оставался привязан к носителю, из-за чего приходилось переписывать код с использованием ReentrantLock.
В Java 24 это поведение изменено: пиннинг отключён — виртуальные потоки теперь могут входить в
synchronized без блокировки поток-носителя.Теперь
synchronized снова можно безопасно использовать с виртуальными потоками — просто и без обходных решений.❤ — если имбовая обнова
😎 — если даже не пользовался ими
📱 Java Developer | #обучение
