34 读写锁 ReentrantReadWriteLock
2022-04-18 本文已影响0人
小周爱吃瓜
- 读写锁:
读多写少场景,在读多于写的场景,读写锁能够提供比排它锁更好的并发和吞吐量。
- 公平性
- 可重入
3 锁降级,先获取写锁,再获取读锁最后释放写锁,写锁能够降级称为读锁。
如何维护:
state 高低位,S&0x0000FFFF
读状态:低位:
![](https://img.haomeiwen.com/i4464433/3f271b0d646666f7.png)
另外还有基数词,读锁用的就是一个共享锁。
获取到了共享锁,则计数器+1,释放共享锁,则计数器-1.
![](https://img.haomeiwen.com/i4464433/7733fbdbe0b0346d.png)
ReentrantReadWriteLock与ReentrantLock一样,其锁主体依然是Sync,它的读锁、写锁都是依靠自定义同步器Sync来实现的。所以ReentrantReadWriteLock实际上只有一个锁,只是在获取读取锁和写入锁的方式上不一样而已,它的读写锁其实就是两个类:ReadLock、writeLock,这两个类都是lock实现。读写状态就是其同步器的同步状态,在ReentrantLock中同步状态表示一个锁被一个线程重复获取的次数,而读写锁的自定义同步器需要在同步状态(一个整型变量)上维护多个读线程和一个写线程的状态