AQS和CAS

CAS

Conmpare And Swap,它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。
java中的Atomic包内部包含Unsafe类,Unsafe(C++)类内部实现原理就是CAS

ABA

CAS可以解决并发问题,但是如果1,2连个线程同时操作数据x,1将x修改为y,再次修改成x,此时2对x进行更新
此时2线程可以操作成功,但这是有问题的,需要额外增加个变量进行标记

1. x=2
2.线程1取出x,参考值2
3.线程2取出x,参考值2
4.线程1将x设为3,参考值2
5.线程1将x设为2,参考值3
6.线程2将x设为4,参考值2
第6步操作成功,但是他的参考值是最原始第2步的参考值,而正确的参考值应该是第五部设置成功后的参考值,6没有进行及时更新

AQS

AbstractQueuedSynchronize,AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架.
在这里插入图片描述
state由volatile修饰,保证可见性,并利用CAS进行更新
获取和释放锁流程如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值