解答
1、CAS 容易造成 ABA 问题
一个线程 a 将数值改成了 b,接着又改成了 a,此时 CAS 认为是没有变化,其实是已经变化过了,而这个问题的解决方案可以使用版本号标识,每操作一次version 加 1。在 java5 中,已经提供了 AtomicStampedReference 来解决问题。
2、不能保证代码块的原子性
CAS 机制所保证的知识一个变量的原子性操作,而不能保证整个代码块的原子性。比如需要保证 3 个变量共同进行原子性的更新,就不得不使用 synchronized 了。
3、CAS 造成 CPU 利用率增加
CAS 里面是一个循环判断的过程,如果线程一直没有获取到状态,cpu资源会一直被占用。
帖子还没人回复快来抢沙发