CAS 原理以及ABA问题

Java面试题

CAS 原理

CAS 全称是Compare and Swap,比较再交换。比较内存中某个值是否和预期值相同,如果相同则将这个值更新为新值,不相同则不更新。

CAS锁-乐观锁

CAS自旋锁,属于乐观锁。 通过do-while循环,当通过CAS更新值成功时,跳出循环,否则一直循环尝试更新直到成功。

CAS缺点

1自旋时间长,浪费cpu资源。

        出现锁竞争时,等待线程会一直通过自旋来竞争锁,浪费了cpu资源。

2.只能保证一个变量的原子操作。

        CAS只能针对一个共享变量使用,如果多个变量都需要保证原子操作,就只能使用锁。

3.ABA问题。

        内存中的值由A变成B,然后又变回A后,当CAS检查时,无法发现是否被修改过。

ABA问题解决方法:版本号控制,判断版本是否一致,每次修改版本都+1.

 CAS的应用

AtomicXXX开头的原子类,保证了多线程环境下共享变量的原子操作。原子类中的CAS是通过Unsafe类来实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值