在java中使用volatile关键字的完整示例?

我需要一个在java中使用volatile关键字的简单示例,由于不使用volatile而表现不一致。

挥发性使用的理论部分对我来说已经很清楚了。

首先,由于非易失性变量,没有保证暴露缓存的方法。 您的JVM可能对您始终非常友善,并有效地将每个变量视为易失性。

话虽这么说,有几种方法可以增加线程缓存自己版本的非易失性变量的可能性。 这是一个程序,它暴露了我测试过的大多数机器中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. 

并终止。