CAS简介
CAS全称CompareAndSet,比较并交换,有一个预期值,和一个最终修改值,如果预期值和当前值不相等则修改失败,否则修改成功.
CAS特点
CAS是一个共享锁丶乐观锁,而synchronized是排它锁互斥锁
CAS是轻量级的锁.
CAS缺点
- 并发量高时资源开销大
多个线程在修改值时,只有一个线程能成功修改,其它线程就会进入死循环,也就是自旋空转占用CPU资源 - 使用场景局限性
一次只能修改单个值,保证单个值是线程安全的,而synchronized是可以一段程序保证线程安全.
CAS案例
public class CompareAndSetDemo {
static AtomicInteger atomicInteger = new AtomicInteger(6);
public static void main(String[] args) {
boolean b = atomicInteger.compareAndSet(6, 2020);
System.out.println(b+",比较并交换:"+atomicInteger.get());
b = atomicInteger.compareAndSet(6, 1024);
System.out.println(b+",比较并交换:"+atomicInteger.get());
}
}
程序输出如图上,第一次期望值6,修改值2020,比较并交换成功,值改为2020
第二次期望值6,修改值1024,比较并交换失败,值还是2020,期望值和原值不匹配修改不成功