顾名思义,就是先比较再设值。它的功能是判断内存某个值是否为预期值,如果是则更改为新的值,这个过程是原子的。
拿一个Java例子来体会下:
package com.lantian3.learn.learn.juc;
import java.util.concurrent.atomic.AtomicInteger;
public class CASDemo {
public static void main(String[] args) {
AtomicInteger atomicInteger = new AtomicInteger(5);
// 第一个参数代表期望主物理内存的当前值,第二个参数代表希望修改成的值。
// 如果第一个参数等于主物理内存的当前值,那么当前值将被修改为第二个参数的值。
// 如果第一个参数不等于主物理内存的当前值,那么修改失败,值不变。
boolean b = atomicInteger.compareAndSet(5, 8);
System.out.println(b + ": current value--------" + atomicInteger);
boolean boo = atomicInteger.compareAndSet(5, 80);
System.out.println(b + ": current value--------" + atomicInteger);
}
}
> Task :CASDemo.main()
true: current value--------8
true: current value--------8
从结果可以看出,第一次修改成功,第二次修改失败。
通常为了兼顾效率和性能,如非必须,并不鼓励使用synchronized ,而使用JUC下的此类操作来代替。
原文:https://www.cnblogs.com/phplantian/p/14609832.html