【线程】二、AQS

AQS是Lock的底层。

构成

AbstractQueuedSynchronizer是个抽象类,包含一个state和一个双向链表

其中

  1. state是用volatile修饰,保证state的线程可见性
  2. 双向链表是线程的等待队列,采用CAS进行加入和取出操作

实现

不同的锁类型,对AQS中的state和链表有不同的实现。例如

  • 在reentrantLock中,state的作用是记录了偏向锁的概念。当有一个线程加锁时,state设置为1,其他线程如果看到state !=0,则加入等待队列。如果当前线程,再次加锁,则state设置为2,以此类推。
  • 在countdownLatch中,state的作用则是记录了countdown的数量。每次countdown的时候,state-1。

varHandler

在jdk1.9之后,增加了varHandler对象。该对象指的是引用。可以通过该引用来改变成员变量的值。

相比反射,好处有2个

  1. 反射每次改变值,都需要校验,而varHandler不需要,相等于直接改二进制码
  2. varHandler有cas方法,所以能将普通的成员对象操作变成原子操作

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值