微信公众号:路人zhang
网站救助计划

1.为阅读体验,本站无任何广告,也无任何盈利方法,站长一直在用爱发电,现濒临倒闭,希望有能力的同学能帮忙分担服务器成本


2.捐助10元及以上同学,可添加站长微信lurenzhang888,备注捐助网站倒闭后可联系站长领取本站pdf内容


3.若网站能存活下来,后续将会持续更新内容

当前位置: 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有什么优点呢?

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

本站链接:https://www.mianshi.online如需勘误或投稿,请联系微信:lurenzhang888


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