首页 > 其他 > 详细

CAS

时间:2021-07-23 23:56:25      阅读:47      评论:0      收藏:0      [点我收藏+]

1、什么是cas

cas是compareandswap的简称,Java从1.5开始引入乐观锁。

 

技术分享图片

 

ABA 问题

当线程一拿到资源A进行比较的时候,此时线程二刚好也拿到了资源A也开始进行比较,这样线程一和线程二都成功了,但是资源A只加了一,

为了解决这个问题,在变量前面追加版本号:每次变量更新就把版本号加1,则A-B-A就变成1A-2B-3A。

2、长时间自旋消耗资源

自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销

3、只能保证一个变量的原子操作

如上图所示,只能保证A得原子操作,如果在多几个变量就不能够使用了。从Java1.5开始JDK提供了AtomicReference类来保证引用对象之间的原子性,你可以把多个变量放在一个对象里来进行CAS操作。

 

 

CAS 的应用

1.Java的concurrent包下就有很多类似的实现类,如Atomic

2.自旋锁(ConcurrentHashMap就使用了CAS加synchronized来实现)

private static final sun.misc.Unsafe U;

技术分享图片

 

 

3.令牌桶限流器

令牌桶限流器 就是系统以恒定的速度向桶内增加令牌。每次请求前从令牌桶里面获取令牌。如果获取到令牌就才可以进行访问。当令牌桶内没有令牌的时候,拒绝提供服务。我们来看看 eureka 的限流器是如何使用 CAS 来维护多线程环境下对 token 的增加和分发的。

 

参考文章

 https://blog.csdn.net/ln_6am/article/details/85642853

https://cloud.tencent.com/developer/article/1462258

CAS

原文:https://www.cnblogs.com/fuqiang-zhou/p/15053912.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!