不使用volatile关键字平台特定的效果吗?是否使用volatile关键字平台特有的效果?
在Ubuntu 13.04 x64上使用openJDK 1.7使用或不使用volatile关键字没有任何影响;意思是程序在不使用volatile时按预期执行。
我想知道这个的确切原因是什么,以及为什么它不会像Windows的Oracle JVM那样每次都失败。
我知道什么是挥发性担保以及何时应该使用。这不是问题。
例如:
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();
}}
你是怎么测试它并在我们这里证明它的? –
示例代码? Java本身,所有这些都应该是平台独立的。 – Ayman
也许'volatile'并不是必需的:) – dasblinkenlight