compareAndSet 的理解

CAS是无锁的一种实现,通过compareAndSet方法不断尝试修改值,避免了synchronized的重量级锁带来的性能开销。自旋锁在高CPU性能环境下有效,但面临竞争激烈时可能导致忙等,消耗CPU资源。相对于等待通知的同步机制,自旋锁减少了锁的使用,提高了某些场景下的效率。
摘要由CSDN通过智能技术生成
1.用法

用法 xxx.compareAndSet (x,y)

x:预判值 。 y :修改值。

讲 x 的值修改为 y。

方法返回值是 Boolean 类型。

2. 思考
  1. 该方法是属于 cas 自旋锁的重要工具。 自旋锁就是无锁。因为没有加锁。锁是一种很重量级的东西,例如 sy… 加上之后程序运行速度奇慢无比。而此时出现了代替他的自旋锁。

  2. 为什么要用 cas 取代 sy…

使用 cas 一般需要 while 循环配合试错。当尝试的结果返回 true 的时候执行一些列的操作。就好比你去上厕所要不停地去检查有没有一间厕所门是开着的。

而 sy… 相反一般配合 notify 使用,你第一次没抢到厕所,会有人上完之后温馨提醒你去有空的厕所。

我们都知道 加锁 sy。。是一种很重量级的操作。时间消耗很高,而不断试错 (自旋锁) 的成本很低。两个成本相比较而言,试错优胜,所有自旋锁胜出。 他们的目标是相同的。都是上厕所。我自旋锁虽然要去看一万遍有没有空的房间,但是成本依然很低,因为现在的 cpu 性能都很高。而加锁很拖慢时间。因为锁里面的操作涉及指令重排序等等。

  1. 自旋锁的问题。既然我把自旋锁猛夸一边,难道他就没什么问题吗 。当然有。就像有,三个人同时看见一间厕所怎么办?

  2. 让最先看见的人去上 ,不停看厕所有没有人,但是这样也是很消耗 cpu 的。类似于忙等。

  3. 让最先看见的人去上厕所,其余人回去睡觉 (wait)。这样也会涉及加锁问题但是锁里面的代码块很少。相比之前。运行更加快了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值