我想知道写入volatile变量是否会强制jvm将所有非volatile变量同步到内存中,那么例如下面的代码会发生什么:
volatile int x;
int y;
y=5;
x=10;
x 将被写入内存,但是 y 会发生什么?它也会被写入内存吗?
最佳答案
是的,根据the Java Language Specification (third edition) -- in particular section 17.4.4的规则-- 每个看到 x
新值的线程如果试图读取它,随后也会看到 y
的新值。不读取 x
的线程不保证会受到影响。
但是请注意,JLS 的第二 版的内存模型中不存在此保证。在那里, volatile 读取和写入对非 volatile 内存访问的顺序没有影响。
关于java - 写入 volatile 变量后会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7129015/