java-锁-ReentrantReadWriteLock
时间:2020-09-27 15:57:46
收藏:0
阅读:39
对于"ReentrantReadWriteLock" 和reentrantLock的比较
- 相同点:由于ReentrantReadWriteLock继承至ReentrantLock,因此拥有相同的操作
- 不同点
- 提供了读锁和写锁两种不同的锁
- 读锁:shared
- 写锁:exclusive
- 锁降级
- 在写锁加锁的情况下,可以将锁降级为读锁;但写锁也需要手动释放
- 但在读锁加锁的情况下,写锁必须等待读锁释放后才能加锁
- 提供了读锁和写锁两种不同的锁
talk is cheap , show me the code
public static void main(String[] args) { ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(); ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock(); ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock(); if (readLock.tryLock()) { readLock.unlock(); try { writeLock.lock(); // 在读锁未释放情况下执行写锁加锁,会被一直阻塞,不会往下执行 { //执行相关写的操作 } // 当写锁加锁成功后可以降级为读锁 readLock.lock(); } finally { // 释放写锁 writeLock.unlock(); } } { // 执行读操作 try { } finally { // 保证所有的加锁和解锁都是成对存在 // 如果读锁不释放,可能导致的结果为所有的读操作都不会有影响,但写操作会被一直阻塞 readLock.unlock(); } } }
原文:https://www.cnblogs.com/xingguoblog/p/13739195.html
评论(0)