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

时间:2011-08-20 01:40:10

标签: java volatile

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

volatile int x;
int y;

y=5; 
x=10;

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

1 个答案:

答案 0 :(得分:5)

是的,根据the Java Language Specification (third edition) -- in particular section 17.4.4的规则 - 看到x的新值的每个帖子随后也会看到y的新值,如果他们尝试阅读它的话。未读取x的线程不会受到影响。

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