我需要一个简单的示例,在Java中使用volatile关键字,这是由于未使用volatile而导致的行为不一致。

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

最佳答案

首先,由于非易失性变量,无法保证公开缓存的方法。您的JVM可能一直都很友好,可以有效地将每个变量都视为volatile。

话虽这么说,但是有几种方法可以增加使线程缓存其自己的非易失性变量版本的可能性。这是一个程序,在我测试过的大多数计算机上都揭示了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.

然后终止

07-26 00:21