一、读锁是(多线程)共享锁,是如何记录重入次数的?

写锁是独占锁,可以使用state记录重入次数。但是读锁是共享锁,记录重入,就无法仅使用state记录重入信息了。
读锁信息。使用state高16位记录获取读锁的的线程数。重入次数使用每个线程的ThreadLocal记录。

读锁的第一个线程单独处理。使用firstReader记录第一个线程、firstReaderHolderCount记录重入次数

二、写饥饿、写降级

读锁期间,不允许写锁

StampedLock乐观锁,读锁允许加入写锁。