Semaphore 获取许可流程图
2022-01-02 00:04:12 1 举报
Semaphore 获取许可流程图
作者其他创作
大纲/内容
doAcquireSharedInterruptibly没有可用的许可,线程就需要等待
调用 acquire 获取许可
nonfairTryAcquireShared 1. 获取剩余可用许可2. 减去当前要消耗的许可3. CAS将剩余的许可设置会state4. 返回剩余可用的许可(不够本次可能为负数)
tryAcquireShared, 尝试获取共享锁
阻塞当前线程
否
。。。
加锁成功
是
剩余可用的许可<0
传播机制:尝试唤醒同步队列中下一个等待的
构造信号量new Semaphore
是否唤醒成功
底层基于AQS 共享锁,permits 实际会在构造函数中赋值给AQS 中 state, 默认实现的是非公平锁
将前一个节点的 waitStatus 设置为-1 如果前一个节点被中断,那么就将前面被中断的节点从同步队列中剔除
addWaiter1. 将线程构建为一个共享节点2. 加入AQS 的同步队列3. 同步队列不存在就创建
0 条评论
下一页