【高频面试题】Cas你知道吗?

一、什么是CAS?

1、比较并交换

AtomicInteger

compareAndSet  如果期望值(主内存的值)与修改值(工作内存的值)相同,则修改;

类似GitHub的提交版本号。

2、CAS的底层原理是什么?

它是一条并发原语。

比较当前工作内存和主内存的值,如果相同则执行规定操作,否则继续直到主内存和工作内存的值一致为止。

 

CAS应用

CAS中有三个操作数,内存值V,期望值A,要修改的值B。

当且仅当V等于A时,才会将内存中的V替换为B,否则什么都不做。

 

3、CAS缺点

①getAndAddInt方法执行的时候,有个dowhile方法,

如果CAS失败,会一直尝试,如果CAS 长时间不成功,会给CPU带来很大的开销。

②他只能保证一个共享变量的原子操作。

ABA问题

产生

CAS实现需要取出内存的数据比较并替换,在这个时间差内会导致数据变化。

如何解决?

原子引用  AtomicReference<?>

时间戳原子引用  AtomicStampedReference -  新增机制,修改版本号(时间戳)

T1 100 1 

T2 100 1   101 2   100 3 

结果如下:

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值