I need a simple example of use of the volatile
keyword in Java, behaving inconsistently as a result of not using volatile
.
The theory part of volatile usage is already clear to me.
首先,由于非易失性变量,没有保证公开缓存的方法。您的 JVM 可能一直对您非常友善,并且有效地将每个变量视为 volatile。
话虽如此,有几种方法可以增加线程缓存自己的非易失性变量版本的可能性。这是一个程序,它揭示了 volatile 在我测试过的大多数机器中的重要性(改编版本来自这里):
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
volatile 导致它打印
keepRunning set to false.
Thread terminated.
并终止。