我想知道写一个volatile变量是否会强制jvm将所有非易失性变量同步到内存中,例如,下面的代码会发生什么:
volatile int x;
int y;
y=5;
x=10;
x将被写入内存,但是会发生什么?它会被写入记忆吗?
答案 0 :(得分:5)
是的,根据the Java Language Specification (third edition) -- in particular section 17.4.4的规则 - 看到x
的新值的每个帖子随后也会看到y
的新值,如果他们尝试阅读它的话。未读取x
的线程不会受到影响。
请注意,此保证不存在于第二版JLS的内存模型中。在那里,易失性读取和写入对非易失性存储器访问的顺序没有影响。