当前位置:   article > 正文

ReadWriteLock读写锁_readwritelock同时对读写上锁

readwritelock同时对读写上锁

ReadWriteLock读写锁

并发写需要等待,并发读等于无锁
在这里插入图片描述

  • 读和写是同一把锁控制
  • 只要写锁没释放,读锁就必须等待,反之一样
  • 允许多个读锁 和 仅允许一个 写锁
  • 读锁是共享锁,写锁是排他锁(互斥锁)
  • 读写锁是同一把锁 RReadWriteLock lock = redissonClient.getReadWriteLock(“rw-lock”); get set取值也是同一个对象

需求:保证获取的是最新的数据? 怎么操作?

更新完数据就释放写锁,定时任务 判断锁是否存在,如果锁存在,等锁释放后取值

在这里插入图片描述

这里是先执行写锁再执行读锁,当写锁释放时,写锁读锁同时渲染数据在这里插入图片描述

 //写锁
    @GetMapping("/write")
    @ResponseBody
    public String writeValue(){
        //读写锁是同一把锁
        RReadWriteLock lock = redissonClient.getReadWriteLock("rw-lock");
        RLock writeLock = lock.writeLock();
        String uuid = "";
        try {
            uuid = UUID.randomUUID().toString();
            writeLock.lock();
            System.out.println("写锁占用成功");
            Thread.sleep(30000);
            redisTemplate.opsForValue().set("writeValue", uuid);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //写锁释放,读锁才能使用
            writeLock.unlock();
            System.out.println("写锁释放完成");
        }

        return uuid;
    }

    //读锁
    @GetMapping("/read")
    @ResponseBody
    public String readValue(){
        RReadWriteLock lock = redissonClient.getReadWriteLock("rw-lock");
        RLock readLock = lock.readLock();
        String uuid = "";
        try {
            readLock.lock();
            uuid = redisTemplate.opsForValue().get("writeValue");
            System.out.println("读锁占用成功");
            Thread.sleep(30000);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            readLock.unlock();
            System.out.println("读锁释放完成");
        }

        return uuid;

    }


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

先读后写,读锁释放,写锁才能占用,这里就可以看出来读和写是同一把锁
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/956220
推荐阅读
相关标签
  

闽ICP备14008679号