> 文档中心 > ReentrantReadWriteLock读写锁源码分析

ReentrantReadWriteLock读写锁源码分析

ReentrantReadWriteLock读写锁源码分析

ReentrantReadWriteLock是jdk提供的读写锁,读写锁类似mysql中的读写锁概念,读锁与读锁之间可以共存,但是写锁和读锁写锁之间都不能同时加锁
读写锁适用于在一些读多写少的场景下代替ReentrantLock,让读与读之间可以并发,比如现在有一个线程不安全的数据结构,读多写少,我们可以使用ReentrantReadWriteLock,
在读取时加读锁,修改数据时加写锁。

使用方式

ReentrantReadWriteLock的使用方式为,首先创建一个共享的ReentrantReadWriteLock对象,然后通过这个对象的readLock和writeLock方法分别获取读锁和写锁。
这两个锁都实现了Lock接口,可以使用lock,unlock,tryLock等方法,需要注意的是unlock需要放到加锁代码的finally块中保证锁最终能释放。

锁降级: 如果一个线程已经拿到了写锁,是可以继续加读锁的,并且可以在释放读锁之前释放写锁,那么持有的锁就会降级为读锁,其他线程的读锁可以加锁。
但是反过来是不行的,也就是一个线程加了读锁,是不能再加写锁的,是为了避免出现死锁的情况(两个加了读锁的线程都在尝试加写锁,但是写锁由被各自的读锁阻塞)类似mysql中的读写锁死锁)。

公平锁: 默认情况(默认的构造函数)下读写锁是非公平锁,不能保证先到先得,有可能出现插队的情况,吞吐量更高,如果希望使

ReentrantReadWriteLock读写锁源码分析 创作打卡挑战赛 ReentrantReadWriteLock读写锁源码分析 赢取流量/现金/CSDN周边激励大奖