浅谈AQS(AbstractQueuedSynchronizer,同步队列)

1.1 同步队列:队列中存放排队等待锁的线程,每个线程放入队列时会被包装为Node类,如下图。

 1.2 抢锁:调用lock方法,如果抢锁成功(CAS成功,或者是重入——state计数加1),那么initialTryLock方法返回true,如下图。如果失败,再重新acquire尝试一次。尝试之后还是失败,那么将当前线程放入AQS等待队列中,并通过LockSupport的park方法挂起当前线程。

抢锁时,公平锁FairSync和非公平锁NonFairSync的区别就是公平锁FairSync在抢锁时会判断当前等待队列中是否有线程在等待,如下图所示。

 1.3 释放锁:因为存在重入,所以state减到0,才说明锁完全释放。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值