前言

读写锁的好处就是能帮助客户读到的数据一定是最新的,写锁是排他锁,而读锁是一个共享锁,如果写锁一直存在,那么读取数据就要一直等待,直到写入数据完成才能看到,保证了数据的一致性。

代码示例

在这个例子中,使用redis在writeLock()写数据,然后在readLock()函数中读出来

@ResponseBody
    @GetMapping("/writeLock")
    public String writeLock(){
        //获得锁
        RReadWriteLock rwlock = redissonClient.getReadWriteLock("rwlock");
        //加锁
        RLock rLock = rwlock.writeLock();
        try {
            new RedisTool().set("name", "tom");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }finally {
            System.out.println("解写锁:" + Thread.currentThread().getId());
            //解锁
            rLock.unlock();
        }
        return "writeLock";
    }

    @ResponseBody
    @GetMapping("/readLock")
    public String readLock(){
        //获得锁
        RReadWriteLock rwlock = redissonClient.getReadWriteLock("rwlock");
        //加锁
        RLock rLock = rwlock.readLock();
        try {
            System.out.println("加读锁成功了..........................");
            String name = new RedisTool().get("name");
            System.out.println(name);
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }finally {
            System.out.println("解读锁:" + Thread.currentThread().getId());
            //解锁
            rLock.unlock();
        }
        return "readLock";
    }
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐