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

时间:2012-05-26 06:25:19

标签: java volatile

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

volatile 用法的理论部分对我来说已经很清楚了。

1 个答案:

答案 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.

并终止。