CAS

69 阅读1分钟

一、CAS了解吗?为什么要用它不用synchronized?

  1. 多线程中做更新操作时,保证线程安全性的一种方法
  2. 内存值、预期值、新值,当内存值与预期值相同时直接更新为新值,否则放弃更新
  3. CAS相当于没有加锁,多个线程都可以直接操作共享资源,在实际去修改的时候才去判断能否修改成功,很多的情况下会synchronized锁要高效很多,如对一个值进行累加

二、CAS有什么缺点?如何解决?

  1. 会产生ABA问题:A线程读到内存值为100,一个线程将内存值改为10,另一个线程再从10改为100,此时等A线程拿到执行权,内存值和预期值依然是100,A线程就可以修改了,但实际上是产生了改变的
  2. AtomicStampedReference类,比对内存值+版本