在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.
并终止。