ReentrantReadWriteLock源码分析
2022-06-14 16:07:50 0 举报
AQS之ReentrantReadWriteLock源码分析
作者其他创作
大纲/内容
ReadLock
当前是否有线程持读锁
读锁释放锁tryReleaseShared
否
implements
设置该线程的重入锁数
失败
设置当前线程为持有写锁线程
当前是否有线程持锁
Sync
写锁释放锁tryRelease
获取锁失败
获取锁成功
ThreadLocalHoldCounter
state - 1 == 0
是
CAS设置写锁+1
计算读锁数量
读锁数量<限制阈值
AbstractQueuedSynchronizer
CAS读锁数量
入队,出队(ReentrantLock逻辑不在演示)
写锁是否阻塞
WriteLock
当前线程 == 持有写锁线程
成功
计算写锁数量
当前是否有线程持有写锁
ReentrantReadWriteLock
返回true/false
FairSync
写锁获得锁tryAcquire
extends
ReentrantReadWriteLock类结构
CAS读锁数量 -1
Lock
返回结果读锁 == 0
抛异常
读锁是否阻塞
当前线程==持锁线程
读锁获得锁tryAcquireShared
返回结果
验证写锁数量是否超过最大值
HoldCounter
设置写锁+1
设置持锁线程null
当前线程的读锁重入数 -1
ReadWriteLock
再次尝试获取读锁
这是锁降级过程
是否有写锁
设置state
NonfairSync
0 条评论
下一页