可重入读写锁
内部有
- 1个读锁
- 1个写锁
- 1个sync
Sync
属性:
- transient ThreadLocalHoldCounter readHolds;
- Thread firstReader
- HoldCounter cachedHoldCounter;
- int firstReaderHoldCount;
内部类:
HoldCounter
保存线程id和应用次数�
ThreadLocalHoldCounter
继承自ThreadLocal,用于记录HoldCounter
用来记录各个线程获得读锁的次数,有threadLocal的方式去保存
�
NonfairSync
FairSync
�
ReadLock
支持重入的共享锁
WriteLock
支持重入的排他锁�
�
锁升降级问题
没有锁升级
为了保证数据可见性。因此不允许获得读锁后,在获得写锁
有锁降级
先获取写锁,在获取读锁,