ホームページ  >  記事  >  Java  >  Java 並列プログラミングにおける volatile キーワードの役割と使用法

Java 並列プログラミングにおける volatile キーワードの役割と使用法

WBOY
WBOYオリジナル
2024-04-19 08:24:011076ブラウズ

Java 並列プログラミングでは、volatile キーワードにより、マルチスレッド環境での共有変数への一貫したアクセスが保証されます。つまり、変数を volatile として宣言し、プロセッサが最適化を並べ替えることを防ぎます。不整合を防ぐために、すべてのスレッドが一貫した方法で共有変数にアクセスするようにしてください。このサンプル コードは、volatile キーワードを使用してマルチスレッド環境でカウンタを正しく計算する方法を示しています。

Java 並列プログラミングにおける volatile キーワードの役割と使用法

#Java 並列プログラミングにおける volatile キーワードの役割と使用法

#はじめに

volatile キーワードは Java 並列プログラミングにおいて非常に重要であり、マルチスレッド環境で共有変数に正しくアクセスできるようにするために使用されます。これは、プロセッサが共有変数に対して並べ替えの最適化を実行できないようにすることで実現されます。

関数

volatile キーワードには次の機能があります:

    1 つ以上の変数を volatile 性別として宣言します。 (または「ボラティリティ」)。
  • すべてのスレッドが一貫した方法でそのような変数にアクセスできるようにしてください。
  • プロセッサが再順序付けの最適化を実行できないようにします。

構文

volatile キーワードはインスタンス変数とローカル変数に適用できます:

//实例变量
private volatile int counter;

//局部变量
public void incrementCounter() {
    volatile int count = counter;
    ...
}

並べ替えの最適化

パフォーマンスを向上させるために、プロセッサは命令に対して並べ替えの最適化を実行することがよくあります。ただし、マルチスレッド環境では、共有変数へのスレッド アクセスに不整合が生じる可能性があります。

次のコードを考えてみましょう:

public class Counter {
    private int counter;

    public void incrementCounter() {
        counter++;
    }

    public int getCounter() {
        return counter;
    }
}

volatile キーワードが使用されていない場合、プロセッサは incrementCounter() メソッドに反応し、 getCounter () メソッド内の命令が並べ替えられるため、読み取られた counter 値が最新ではなくなります。

実際的なケース

次に、

volatile キーワードを使用して、マルチスレッド環境でカウンタが正しく動作することを確認する例を示します。

public class VolatileCounterDemo {

    private volatile int counter;

    public void incrementCounter() {
        counter++;
    }

    public static void main(String[] args) throws InterruptedException {
        VolatileCounterDemo demo = new VolatileCounterDemo();

        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 1000000; i++) {
                demo.incrementCounter();
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 1000000; i++) {
                demo.incrementCounter();
            }
        });

        t1.start();
        t2.start();

        t1.join();
        t2.join();

        System.out.println("最终计数器值:" + demo.counter);
    }
}

出力:

最终计数器值:2000000

以上がJava 並列プログラミングにおける volatile キーワードの役割と使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。