首页 > 编程语言 > 详细

java-锁-ReentrantReadWriteLock

时间:2020-09-27 15:57:46      阅读:40      评论:0      收藏:0      [点我收藏+]

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

    }

 

      

java-锁-ReentrantReadWriteLock

原文:https://www.cnblogs.com/xingguoblog/p/13739195.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!