CAS(CompareAndSet/Swap)

原理

1.CPU原语操作

2.cas(v,Expected e,newValue)   ,其中,v:更改的值,e:更改前希望的值,newValue:要更改成的值

3.内部使用了unsafe 

基于CAS的锁

1.lock锁,实现-ReentrantLock, ReentrantLock底层是AQS(AbstractQueuedSynchronizer),AQS的底层是CAS

2.ReadWriteLock 读写锁,方法: writeLock 写锁,readLock读锁

3.AtomicXXX类 java提供的内部自带锁的操作,在java.util.concurrent.atomic路径下

4.LongAdder 内部使用了分段锁,线程数特别多的时候,效率高

5.AbstractQueuedSynchronized --AQS(CLH)  使用cas操作,代替了之前的锁操作,volatile state 双向链表,node节点,node节点里面是 thread

unsate c源码,操作线程

CAS问题

特性:cas的操作,是cpu指令级别的操作,中间无法被打断,cpu原语支持

CAS会有ABA问题,解决ABA问题:1.加version,2.加时间戳,3.使用AtomicStampedReference-compareAndSet解决ABA问题(原理等同于加版本号),4.AtomicMarkableReference (原理等同于加版本号)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值