考虑下面的Java代码:!不同!易变的变量?
volatile boolean v1 = false;
volatile boolean v2 = false;
//Thread A
v1 = true;
if (v2)
System.out.println("v2 was true");
//Thread B
v2 = true;
if (v1)
System.out.println("v1 was true");
如果有挥发性访问全局可见总订货则至少有一个的println总是到达。
这实际上是由Java标准保证的吗?或者是这样的可能执行:
A: v1 = true;
B: v2 = true;
A: read v2 = false;
B: read v1 = false;
A: v2 = true becomes visible (after the if)
B: v1 = true becomes visible (after the if)
我只能找到报表有关访问的标准相同 volatile变量(但我可能失去了一些东西)。
“写入易失性变量(§8.3.1.4)v与任何线程(随后根据同步顺序定义的内容)随后对v的所有后续读取进行同步。”
http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.4.4
谢谢!
是的,它的确如此。这个问题是http://stackoverflow.com/questions/2441279/java-volatile-guarantees-and-out-of-order-execution的副本 – 2010-03-31 18:33:47