CAS有什么优点、缺点

参考答案

1. CAS的概念

前往查看:什么是CAS

2.  关于CAS操作

  • 如果这个地址上的值和期望的值相等,则给其赋予新值,否则不做任何事儿,但是要返回原值是多少。
  • 每一个CAS操作过程都包含三个运算符:一个内存地址V,一个期望的值A和一个新值B,操作时,如果这个地址上存放的值等于这个期望的值A,则将地址上的值赋为新值B,否则不做任何操作。

3.  CAS的缺点

3.1  ABA问题

例如:一个线程one从内存位置V中取出A,同时另一个线程two也从内存中取出A,并且two进行了一些操作变成了B,然后two又将V位置的数据变成A,这个时候线程one进行CAS操作发现内存中仍然是A,然后one操作成功。尽管线程one的CAS操作成功,但可能存在潜藏的问题。

从Java1.5开始JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。

3.2   循环时间长开销大

对于资源竞争严重(线程冲突严重)的情况,CAS自旋的概率会比较大,从而浪费更多的CPU资源,效率低于synchronized。

3.3   只能保证一个共享变量的原子操作

当对一个共享变量执行操作时,可使用循环CAS的方式来保证原子操作,但是对多个共享变量操作时,循环CAS无法保证操作的原子性,这个时候可以用锁。

4.  CAS的优点

  • cas是一种乐观锁,而且是一种非阻塞的轻量级的乐观锁。
  • 非阻塞式其实就是一个线程想要获得锁,对方会给一个回应表示这个锁能不能获得。
  • 在资源竞争不激烈的情况下性能高,相比synchronized重量锁,synchronized会进行比较复杂的加锁,解锁和唤醒操作。

5.  CAS的底层原理

前往查看:CAS的底层原理是什么

以上,是Java面试题【CAS有什么优点、缺点】的参考答案。

 

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧