CAS(Compare and swap)
CAS有三个操作数,当前值A、内存值V、要修改的新值B
- 如果V==A,将A修改为B
- 如果V!=A,什么都不做(或重试)
将当前值与内存值进行对比,判断是否有被修改过,这就是CAS的核心。
CAS相当于没有加锁,多个线程都可以直接操作共享资源,在实际去修改的时候才去判断能否修改成功,在很多情况下会比synchronized锁高效,比如对一个值进行累加,就没必要使用synchronized锁,使用JUC包下的Automic类就足够。
CAS缺点(ABA)
解决方法:
Java提供了AtomicStampedReference类供我们使用,实际上就是加了一个版本,比对的就是内存值+版本是否一致。