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

问题描述 投票:6回答:1

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

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

java volatile
1个回答
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.

并终止。

© www.soinside.com 2019 - 2024. All rights reserved.