05-JUC-CAS

CASとは何ですか?コンペアアンドスワップ

参照ブログ投稿:https://objcoding.com/2018/11/29/cas/
ここに画像の説明を挿入

CASと同等のコード

/**
 * @Classname SimulatedCAS
 * @Description 模拟CAS操作,java实验CAS基本思想
 * @Date 2021/2/18 15:13
 * @Created by YoungLiu
 */
public class TwoThreadsCompetition implements Runnable{
    
    
    private volatile  int value;
    public synchronized int compareAndSwap(int expectedValue,int newValue){
    
    
        int oldValue = value;
        if(oldValue==expectedValue){
    
    
            value=newValue;
        }
        return oldValue;
    }

    public static void main(String[] args) throws InterruptedException {
    
    
        TwoThreadsCompetition r = new TwoThreadsCompetition();
        r.value=0;
        Thread t1 = new Thread(r,"Thread1");
        Thread t2 = new Thread(r,"Thread2");
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        //此处会输出 1, 但只有一个线程成功修改了值。
        System.out.println(r.value);
    }

    @Override
    public void run() {
    
    
        compareAndSwap(0,1);
    }
}

CASのアプリケーションシナリオ

  1. 楽観的ロック
  2. コンカレントコンテナ
  3. アトミッククラス
    上記のすべての最下層は、CASの基本的な考え方を具体化しています。

AtomicIntegerはCASをどのように実装しますか?

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

CASのデメリット

ABA問題

画像ソース:https://juejin.cn/post/6844903796129136647
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_41729287/article/details/113847132