JUC-第三篇:JUCスレッドシミュレーションCASアルゴリズム

1538 ワード

一、CASアルゴリズム
  • CAS(Compare-And-Swap)は、マルチプロセッサの動作のために設計されたプロセッサの特殊な命令であり、共有データへの同時アクセスを管理するために使用されるハードウェア対同時サポートである.
  • CASは、ロックされていない非ブロックアルゴリズムの実装である.
  • CASには、3つのオペランドが含まれています.
  • 読み書きが必要なメモリ値V
  • で比較する値A
  • 書き込み予定の新しい値B
  • Vの値がAに等しい場合にのみ、CASは新しい値Bを原子的に更新し、そうでなければ何も実行しない.

  • 二、シミュレーション例
    package com.gf.demo;
    
    public class TestCompareAndSwap {
    
        public static void main(String args[]){
            CompareAndSwap cas = new CompareAndSwap();
            for (int i = 0 ; i < 10 ; i++) {
                new Thread( new Runnable() {
                    @Override
                    public void run() {
                        int expectedValue = cas.get();
                        boolean b = cas.compareAndSet( expectedValue , (int)(Math.random()* 101));
                        System.out.println(b);
                    }
                } ).start();
            }
        }
    
    }
    
    class CompareAndSwap {
    
        private int value;
    
        //     
        public synchronized int get() {
            return value;
        }
    
        //  
        public synchronized int compareAndSwap(int expectedValue , int newValue) {
            int oldValue = value;
            if (oldValue == expectedValue) {
                this.value = newValue;
            }
            return oldValue;
        }
    
        //  
        public synchronized boolean compareAndSet(int expectedValue , int newValue) {
            return expectedValue == compareAndSwap( expectedValue , newValue );
        }
    
    }

    CASアルゴリズムは、同時運用共有データに対するハードウェアのサポートであり、ここではシミュレーションにすぎないが、下位層はインスタンスではない可能性がある.