写入volatile变量后会发生什么?

Ano*_*ice 9 java volatile

我想知道写一个volatile变量是否会强制jvm将所有非易失性变量同步到内存中,例如,在下面的代码中会发生什么:

volatile int x;
int y;

y=5; 
x=10;
Run Code Online (Sandbox Code Playgroud)

x将被写入内存,但是会发生什么?它会被写入记忆吗?

Hen*_*olm 5

是的,根据Java语言规范(第三版)的规则- 特别是第17.4.4节 - 每个看到新值的线程x随后也会看到新值,y如果他们试图读取它.x不保证不读取的线程会受到影响.

但请注意,第二版JLS 的内存模型中不存在此保证.在那里,易失性读取和写入对非易失性存储器访问的排序没有影响.