java-锁-ReentrantReadWriteLock

对于"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();
            }
        }

    }

 

      

posted @ 2020-09-27 14:10  郭星  阅读(129)  评论(0)    收藏  举报