6

volatileJava でキーワードを使用する簡単な例が必要です。使用しないために一貫性のない動作をしvolatileます。

揮発性の使用法の理論的な部分は、私にはすでに明らかです。

4

1 に答える 1

13

まず第一に、変数が不揮発性であるため、キャッシュを公開する保証された方法はありません。あなたの 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性にすると印刷されます

keepRunning set to false.
Thread terminated.

終了します。

于 2012-05-26T06:31:16.437 に答える