• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:JAVA里的锁之五锁降级

java 搞代码 3年前 (2022-01-27) 51次浏览 已收录 0个评论

锁降级指的是写锁降级为读锁
锁降级是以后拥用写锁,再获取读锁,随后开释写锁的过程。须要留神的是开始拥用写后并没有立刻开释写锁,而是在获取了读锁后才开释。

上面是一个示例:

<code class="java">public class ReadWriteLockTest {
    
    private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
    private Lock writeLock = readWriteLock.writeLock();
    private Lock readLock = readWriteLock.readLock();
    private volatile boolean updateFlag;
    /**锁降级*/
    public void test(){
        readLock.lock();
        if(!updateFlag){
            readLock.unlock();//肯定要先开释了读锁再去获取写锁,如果间接获取写锁,以后线程会被阻塞
            writeLock.lock();//step1,获取写锁
            try {
                if(!updateFlag){
                    //批改数据逻辑,略。
                    updateFlag = true;
                }
                readLock.lock();//step2,获取读锁,排挤其它写锁批改数据
            }finally {
                writeLock.unlock();//step3,开释写锁。到这里,锁降级实现
            }
        }
        try {
            //如果step2不先获取读锁,在step3开释了写锁后其它线程会对数据进行批改,
            //会使得上面‘读取数据逻辑’里呈现数据读取不精确的问题

            //读取数据逻辑,略。
        }finally {
            readLock.unlock();step4
        }
    }
}

须要留神的是ReentrantReadWriteLock不反对锁降级,也就是持用读锁,在不开释的情景下立刻获取写锁。这会导致以后线程始终阻塞在写锁的获取上,而读锁也开释来了。

参考文章:《Java并发编程的艺术》


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:JAVA里的锁之五锁降级
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址