java CASアルゴリズム

3982 ワード

CASアルゴリズムは、ハードウェアの同時動作に対するサポートであり、3つの動作数:メモリ値、事前評価値、および更新値を含む。更新操作を実行していない場合は、先に同期方法でメモリ値と事前評価値が同じかどうかを比較します。等しいと更新値でメモリ値を交換できます。そうでなければ、何もしません。 
 
package concurrent;

/*
 *   CAS  
 */

class CAS {
    //    
    private volatile int value;

    //      
    public synchronized int getValue() {
        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);
    }
}

public class TestCAS {

    public static void main(String[] args) {

        CAS cas = new CAS();

        //  10           
        for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {

                @Override
                public void run() {
                    int expectedValue = cas.getValue();
                    boolean b = cas.compareAndSet(expectedValue, (int) (Math.random() * 101));
                    System.out.println(b);
                }
            }).start();
        }
    }
}
 
転載先:https://www.cnblogs.com/huzi007/p/9365079.html