05-JUC - CAS

¿Qué es CAS? Comparar e intercambiar

Publicación de blog de referencia: https://objcoding.com/2018/11/29/cas/
Inserte la descripción de la imagen aquí

Código equivalente 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);
    }
}

Escenarios de aplicación de CAS

  1. Cerradura optimista
  2. Contenedor concurrente
  3. Clase atómica
    La capa inferior de la anterior encarna la idea básica de CAS.

¿Cómo AtomicInteger implementa CAS?

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Desventajas de CAS

Problema de ABA

Fuente de la imagen: https://juejin.cn/post/6844903796129136647
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_41729287/article/details/113847132
Recomendado
Clasificación