Многопоточность middle
Что такое 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.