一、CAS了解吗?为什么要用它不用synchronized?
- 多线程中做更新操作时,保证线程安全性的一种方法
- 内存值、预期值、新值,当内存值与预期值相同时直接更新为新值,否则放弃更新
- CAS相当于没有加锁,多个线程都可以直接操作共享资源,在实际去修改的时候才去判断能否修改成功,很多的情况下会synchronized锁要高效很多,如对一个值进行累加
二、CAS有什么缺点?如何解决?
- 会产生ABA问题:A线程读到内存值为100,一个线程将内存值改为10,另一个线程再从10改为100,此时等A线程拿到执行权,内存值和预期值依然是100,A线程就可以修改了,但实际上是产生了改变的
- AtomicStampedReference类,比对内存值+版本