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