ReentrantReadWriteLock锁降级用法

2021-02-04  本文已影响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();
上一篇下一篇

猜你喜欢

热点阅读