cas的缺点主要有3点:
aba问题:aba的问题指的是在cas更新的过程中,当读取到的值是a,然后准备赋值的时候仍然是a,但是实际上有可能a的值被改成了b,然后⼜被改回了a,这个cas更新的漏洞就叫做aba。只是aba的问题⼤部分场景下都不影响并发的最终效果。
java中有atomicstampedreference来解决这个问题,它加⼊了预期标志和更新后标志两个字段,更新时不光检查值,还要检查当前的标志是否等于预期标志,全部相等的话才会更新。
循环时间⻓开销⼤:⾃旋cas的⽅式如果⻓时间不成功,会给cpu带来很⼤的开销。只能保证⼀个共享变量的原⼦操作:只对⼀个共享变量操作可以保证原⼦性,但是多个则不⾏,多个可以通过atomicreference来处理或者使⽤锁synchronized实现。