Java 並列プログラミングでは、volatile キーワードにより、マルチスレッド環境での共有変数への一貫したアクセスが保証されます。つまり、変数を volatile として宣言し、プロセッサが最適化を並べ替えることを防ぎます。不整合を防ぐために、すべてのスレッドが一貫した方法で共有変数にアクセスするようにしてください。このサンプル コードは、volatile キーワードを使用してマルチスレッド環境でカウンタを正しく計算する方法を示しています。
#Java 並列プログラミングにおける volatile キーワードの役割と使用法
#はじめに
volatile キーワードは Java 並列プログラミングにおいて非常に重要であり、マルチスレッド環境で共有変数に正しくアクセスできるようにするために使用されます。これは、プロセッサが共有変数に対して並べ替えの最適化を実行できないようにすることで実現されます。
関数
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 サイトの他の関連記事を参照してください。