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