扫码关注微信公众号

回复“面试手册”,获取本站PDF版

回复“简历”,获取高质量简历模板

回复“加群”,加入程序员交流群

回复“电子书”,获取程序员类电子书

当前位置: Java > Java并发高频面试题 > 69.CAS存在的问题及优点

其中ABA问题是面试中比较常见的问题

  • ABA问题

在CAS的算法流程中,首先要先比较V的值和E的值,如果相等则进行更新。ABA问题是指,E表示的这个旧值本来是A,然后变成了B,后来又变成了A,但这时有线程来更新,发现E表示的值是A,则直接进行更新了,这样肯定是不对的,但又该怎么解决呢?

ABA的问题的解决方式:ABA的解决方法也很简单,就是利用版本号。给变量加上一个版本号,每次变量更新的时候就把版本号加1,这样即使E的值从A—>B—>A,版本号也发生了变化,这样就解决了CAS出现的ABA问题。基于CAS的乐观锁也是这个实现原理。

  • 循环时间过长导致开销太大

CAS自旋时间过长会给CPU带来非常大的开销

  • 只能保证一个共享变量的原子操作

在操作一个共享变量时,可以通过CAS的方式保证操作的原子性,但如果对多个共享变量进行操作时,CAS则无法保证操作的原子性,这时候就需要用锁了。在看《Java并发编程的艺术》时,里面提到了一个办法可以参考一下,就是将多个共享变量合并成一个共享变量来操作。比如,有两个共享变量i=2,j=a,合并成ij=2a,然后用CAS来操作ij

那么CAS有什么优点呢?

在并发量不是很大时提高效率。


点击面试手册,获取本站面试手册PDF完整版