CAS原理及其API原子类

本文详细介绍了CAS(CompareandSwap)的概念,原子类的使用,如AtomicInteger,以及CAS如何保证线程安全。此外,还探讨了CAS的ABA问题及其解决策略,包括引入版本号以确保操作的原子性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.CAS及使用

1.1. CAS概念

1.2.原子类的使用

1.3.CAS使用自旋锁

2.CAS的ABA问题

2.1.问题介绍

2.2.ABA问题解决方式


1.CAS及使用

1.1. CAS概念

(1)CAS,其实是一种操作的简称,全称为:Compare and swap。

(2)通过全称,我们就可以知道,它的作用就是:比较并且交换,这里的操作数不是两个,而是三个。

(3)作用1:类似一个方法,有三个参数,A、V、B

比较A与V比较是否相等;如果相等,将B和A交换;反之,不进行任何操作。

 上述的比较:是将A内存中的值和V寄存器中的值进行比较,如果它们里面的值相等,就会将B寄存器中的值赋值给A内存中。也就是将内存A中的值和寄存器B中的值进行交换,就不会考虑交换后寄存器B中的值。

(4)作用2:CAS可以保证这一系列操作是原子性的(保证线程安全)

上述将了一堆概念,下面介绍使用CAS的使用;因为JVM对CAS进行了封装,所以我们可以直接使用CAS提供的api就可以了。

1.2.原子类的使用

原子类也就是对cas封装后的抽象表示,但是cas不推荐大家使用,性价比低,安全隐患大。

(1)原子类

大约有下面这些原子类,通过下面的类操作一些数,是原子性的。 

这里的类很多,我们这里只介绍一个:AtomicInteger 

(2)AtomicInteger类

这个是我们比较常用的类,是对int的封装,对一个int数据进行++或者--操作,可以保证其是原子性,也就是线程安全。

  • 创造一个AtomicInteger对象
private static AtomicInteger count = new AtomicInteger(0);

这句代码的意思就是:定义一个int遍历count,并且赋值为0,相当于int count = 0;只不过这样创造的变量可以调用这个类里面的方法进行++或者--操作,并且保证原子性。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码小娥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值