我需要一个在Java中使用volatile
关键字的简单示例,由于不使用volatile
而表现不一致。
volatile 用法的理论部分对我来说已经很清楚了。
答案 0 :(得分:13)
首先,由于非易失性变量,没有保证方式暴露缓存。您的JVM可能对您始终非常友善,并有效地将每个变量视为易失性。
话虽如此,有几种方法可以增加线程缓存自己版本的非易失性变量的可能性。这是一个程序,它暴露了我测试过的大多数机器中volatile的重要性(来自here的改编版本):
class Test extends Thread {
boolean keepRunning = true;
public void run() {
while (keepRunning) {
}
System.out.println("Thread terminated.");
}
public static void main(String[] args) throws InterruptedException {
Test t = new Test();
t.start();
Thread.sleep(1000);
t.keepRunning = false;
System.out.println("keepRunning set to false.");
}
}
此程序通常只输出
keepRunning set to false.
继续跑步。使keepRunning
不稳定导致它打印
keepRunning set to false.
Thread terminated.
并终止。