美文网首页
CAS的缺点

CAS的缺点

作者: 陈大吼 | 来源:发表于2020-11-30 11:30 被阅读0次
1.CPU开销过大

在并发量比较高的情况下,如果许多线程反复尝试更新某一个变量,却又一直更新不成功,循环往复,会给CPU带来很到的压力。

比如:AtomicInteger当中常用的自增方法incrementAndGet:
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return next;
}
}
private volatile int value;
public final int get() {
return value;
}
这段代码是一个无限循环,也就是CAS的自旋,循环体中做了三件事:

  1. 获取当前值
  2. 当前值+1,计算出目标值
  3. 进行CAS操作,如果成功则跳出循环,如果失败则重复上述步骤。

这里需要注意的重点是get方法,这个方法的作用是获取变量的当前值。
如何保证获取的当前值是内存中的最新值?很简单,用volatile关键字来保证(保证线程间的可见性)。

2.不能保证代码块的原子性

CAS机制所保证的知识一个变量的原子性操作,而不能保证整个代码块的原子性。比如需要保证3个变量共同进行原子性的更新,就不得不使用synchronized了。

3.ABA问题

这是CAS机制最大的问题所在。

关联问题

1>. java语言CAS底层如何实现?

利用unsafe提供的原子性操作方法。

2>.什么是ABA问题?怎么解决?

当一个值从A变成B,又更新回A,普通CAS机制会误判通过检测。
利用版本号比较可以有效解决ABA问题。(小明取钱,刚好妈妈存钱例子)
参考:https://www.sohu.com/a/314272265_120104204

相关文章

  • CAS的缺点

    1.CPU开销过大 在并发量比较高的情况下,如果许多线程反复尝试更新某一个变量,却又一直更新不成功,循环往复,会给...

  • JUC面试问题

    请谈谈你对 volatile 的理解 JMM 你谈谈 CAS 你知道吗? CAS缺点 ABA 问题 集合线程不安全...

  • AQS-ReentrantLock

    不通过jdk提供的锁,自己要去实现一个锁,应该如何考虑?1、CAS+自旋:缺点:一直让CPU去执行CAS操作,相当...

  • 乐观锁和悲观锁

    目录 基本概念 实现方式(含实例) 优缺点和适用场景 面试官追问:乐观锁加锁吗? 面试官追问:CAS有哪些缺点? ...

  • CAS第一天入门

    1. CAS的直观认识 主要参考:CAS的官网CAS的视频教程 CAS的结构 a) CAS Server 用于完成...

  • CAS实现SSO单点登录原理

    CAS 简介 CAS 初识 CAS : Central Authentication Service 开源的项目;...

  • CAS Monitoring/Statistics

    简介 cas 监视器查看cas运行情况,CAS官方推荐使用/status/dashboard来管理CAS的配置参考...

  • CAS实现SSO单点登录原理

    1. CAS 简介 1.1. What is CAS ? CAS ( Central Authenti...

  • CAS实现SSO单点登录原理

    1. CAS 简介 1.1. What is CAS ? CAS ( Central Authenti...

  • AtomicXXX以及LongAdder底层原理

    要搞懂AtomicXXX等的原理,首先就要了解CAS的原理。 1.CAS 1.1 什么是 CAS? CAS(Com...

网友评论

      本文标题:CAS的缺点

      本文链接:https://www.haomeiwen.com/subject/tfjrwktx.html