美文网首页
ReentrantReadWriteLock锁降级用法

ReentrantReadWriteLock锁降级用法

作者: 陈大吼 | 来源:发表于2021-02-04 11:51 被阅读0次

    正确的姿势如下:保证在写锁没释放前转化为读锁,写锁紧接着释放,其他线程的读就可以进去了

    private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
    private final Lock r = rwl.readLock();
    private final Lock w = rwl.writeLock();
    new Thread(() -> {
        w.lock();
        //writing
        r.lock(); //同一线程写-读不互斥
        w.unlock();
        //reading
        System.out.println("我已经降级了");
        try {Thread.sleep(2000L);} catch (InterruptedException e) {}
        r.unlock();
    }).start();
    new Thread(() -> {
        r.lock();
        //reading
        System.out.println("我能进去");
        r.unlock();
    }).start();
    

    注意同一个线程先读锁,后写锁,写锁是不能直接进去的

        //单个线程 读-写 互斥,不存在锁升级
        r.lock();
        w.lock(); //需要等持有读锁的其他线程都把读锁释放掉
        System.out.println("ok");
        w.unlock();
        r.unlock();
    

    相关文章

      网友评论

          本文标题:ReentrantReadWriteLock锁降级用法

          本文链接:https://www.haomeiwen.com/subject/bvhbtltx.html