AQS--本质state【CLH锁还没看

线程完成state–,刚好判断state是否为0,不需要主动轮询一直问state是否为0

ReentrantLock为例:

state初始值0
线程A调用lock()方法,尝试通过tryAcquire()方法独占锁
成功:state+1
失败:线程A进入CLH队列(等待队列,直到其他线程释放该锁

假设成功:释放锁前,线程A自身可以重复获得该锁(state++),state–到0才会让锁回复到未锁定状态

CountDownLatch为例

任务分成N个子线程,state初始化值N
每当一个子线程执行完,countDown()
当state为0,CountDownLatch调用unpark()唤醒主线程,主线程从await()方法返回

countDown():使用CAS让state–
await()方法属于CountDownLatch而不是AQS

AQS&&Exclusive&&Share

Exclusive 独占,ReentrantLock
Share共享,CountDownLatch和Semaphore

Exclusive:tryAcquire-tryRelease
Share:tryAcquireShared-tryReleaseShared
也可同时独占+共享,ReentrantReadWriteLock

ReentrantReadWriteLock:Read共享,Write独占

可自定义

AbstractQueuedSynchronizer

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值