写入易失性变量后发生的情况



我想知道写入易失性变量是否会迫使jvm将所有非易失性变量同步到内存中,因此,例如,在以下代码中会发生什么:

volatile int x;
int y;
y=5; 
x=10;

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

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

但是,请注意,在JLS的第二个版本的内存模型中不存在这种保证。在这里,易失性读写对非易失性内存访问的顺序没有影响。

相关内容

最新更新