底层原理---CAS原理

什么是CAS

简介

CAS是原子类的底层原理,同时也是乐观锁的原理,全称是Compare-And-Swap,“比较并交换”,他是一种思想、算法。

特点:可以避免使用互斥锁,当多个线程同时使用CAS更新同一个变量时,只有其中一个线程能操作成功,其他线程更新失败,更新失败的线程不会被阻塞。

思路

CAS实现的无锁算法是一种协商机制,互斥锁不存在协商机制,大家都会尝试抢占资源,利用CAS和利用互斥锁都可以保证并发安全。

CAS的缺点

ABA问题

决定CAS是否进行swap的判断标准是”当前的值和预期的值是否一致“。CAS检查的并不是值有没有发生变化,而是去比较这当前的值和预期值是不是相等。

解决方法:添加一个版本号,标记修改的版本。

自旋时间过长

单次的CAS不一定能执行成功,往往是配合循环来实现的,有时甚至是死循环,不停地进行重试,直到线程竞争不激烈的时候,才能修改成功。

所以在高并发的时候CAS的效率是不高的,因为可能比较一直是被修改的。

范围不能灵活控制

执行CAS时是针对某一个,而不是多个共享变量的。这个变量可能是Integer类型,也有可能是Long类型、对象类型等等。如果想对多个对象同时进行CAS操作并想保证线程安全的话,是比较困难的。

解决方法:利用一个新的类,整合刚才这一组共享变量,新的类中的多个成员变量就是刚才的那多个共享变量,再利用atomic包中的AtomicReference来把这个新对象整体进行CAS操作就可以保证线程安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bufanjun001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值