Что такое happens-before?

Ответ

Ключевое отношение JMM: гарантия видимости и упорядочивания эффектов (JVM вправе переупорядочивать, пока наблюдаемый порядок соблюдён). Если A happens-before B, то записи в A (в том числе все обычные записи до volatile-записи) видны в B. Примеры: unlock → lock того же монитора; volatile write → read; Thread.start() → первая инструкция потока; последняя инструкция → Thread.join().

Разбор: happens-before — гарантия видимости (и упорядочивания эффектов), а не команда выполнить инструкции в строгом физическом порядке: JVM вправе переупорядочивать, пока соблюдён наблюдаемый порядок. Ключевая ловушка volatile: запись volatile-переменной публикует и все предшествующие ей обычные записи (а не только саму переменную), и связь release→acquire устанавливается только на одном и том же мониторе, а не на любых разных.

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

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