不使用 volatile 关键字平台的影响是特定的吗?
在带有 openJDK 1.7 的 Ubuntu 13.04 x64 上,使用或不使用 volatile 关键字均无效;从某种意义上说,程序在不使用 volatile 时按预期执行。
我想知道这个的确切原因是什么以及为什么它不会像在 Windows 中使用 Oracle 的 JVM 那样每次都失败。
我知道什么是 volatile 保证以及何时应该使用它。这不是问题。
例子:
public class VolatileTest {
private static boolean test;
public static void main(String... args) {
Thread a = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
test = true;
}
});
Thread b = new Thread(new Runnable() {
@Override
public void run() {
while(!test) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(test);
}
}
});
a.start();
b.start();
}}