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