Что происходит после записи в переменную volatile?
Интересно, если запись в энергозависимую переменную заставит jvm синхронизировать все энергонезависимые переменные с памятью, например, что произойдет в следующем коде:
volatile int x;
int y;
y=5;
x=10;
x будет записан в память, но что будет с y? это также будет записано в память?
1 ответ
Да, в соответствии с правилами Спецификации языка Java (третье издание) - в частности, раздел 17.4.4 - каждый поток, который видит новое значение x
впоследствии также увидим новое значение y
если они попытаются это прочитать. Темы, которые не читают x
не гарантированно будут затронуты.
Остерегайтесь, однако, что эта гарантия не присутствовала в модели памяти второго издания JLS. Там энергозависимые операции чтения и записи не влияли на порядок доступа к энергонезависимой памяти.