Что происходит после записи в переменную volatile?

Интересно, если запись в энергозависимую переменную заставит jvm синхронизировать все энергонезависимые переменные с памятью, например, что произойдет в следующем коде:

volatile int x;
int y;

y=5; 
x=10;

x будет записан в память, но что будет с y? это также будет записано в память?

1 ответ

Да, в соответствии с правилами Спецификации языка Java (третье издание) - в частности, раздел 17.4.4 - каждый поток, который видит новое значение x впоследствии также увидим новое значение y если они попытаются это прочитать. Темы, которые не читают x не гарантированно будут затронуты.

Остерегайтесь, однако, что эта гарантия не присутствовала в модели памяти второго издания JLS. Там энергозависимые операции чтения и записи не влияли на порядок доступа к энергонезависимой памяти.

Другие вопросы по тегам