ReentrantReadWriteLock底层也还是AQS
AQS最重要的同步等待队列,那ReentrantReadWriteLock怎么维护这个队列呢?
ReentrantReadWriteLock使用
1)如果线程A已经获取读锁,则线程A和其他线程都不能获取写锁,但可以获取读锁,可以重入。
2)如果线程A已经获取写锁,则线程A可以再获取写锁,也可以获取读锁,支持锁降级和锁重入,但其他线程既不能获取读锁也不能写锁。
根据上面可以知道AQS的同步等待队列只存在两种情况
1)加了写锁,其他线程不能再获取读锁与写锁,只能在进入同步等待队列,那么队列里面就同时存在写线程与读线程;
2)加了读锁,其他线程可以获取读锁,但不能获取写锁,那队列里面只存在写线程
回归AQS,释放独占状态时会唤醒等待队列里的所有线程,释放共享状态时也会唤醒等待队列里的所有线程