Я думаю, что понимаю связь «произошло раньше» для отдельных переменных. Если я напишу изменчивое поле, все последующие чтения этого поля будут содержать это новое значение. Запись volatile
преодолевает барьер памяти и сбрасывает новое значение в основную память.
Я до сих пор не понимаю, что происходит во всех других случаях - например, Thread.start()
, synchronized
или новые блокировки в java.util.concurrent
. Что означает, что они также преодолевают барьер памяти? Какие данные сбрасываются из локального кеша в основную память? Другими словами, каковы масштабы пересечения?
Всегда ли все сбрасывается? Теперь вернемся к volatile
, сбрасывает ли он больше, чем просто одно поле volatile
?