RedissonClient 锁的使用

  • 时间:2025-10-24 20:02 作者: 来源: 阅读:14
  • 扫一扫,手机访问
摘要:RedissonClient是一个基于Redis的分布式锁实现,它提供了许多高级分布式锁功能,如分布式锁、分布式信号量、分布式读写锁等。以下是RedissonClient的常用锁方法介绍: lock():加锁,如果锁不存在则创建,如果存在则获取该锁。 lock(long var1, TimeUnit var3):加锁,如果锁不存在则创建,如果存在则获取该锁

RedissonClient是一个基于Redis的分布式锁实现,它提供了许多高级分布式锁功能,如分布式锁、分布式信号量、分布式读写锁等。以下是RedissonClient的常用锁方法介绍:

  • lock():加锁,如果锁不存在则创建,如果存在则获取该锁。

  • lock(long var1, TimeUnit var3):加锁,如果锁不存在则创建,如果存在则获取该锁。如果获取锁后持有时间超过 var1 设定时间则释放锁。

  • tryLock():尝试获取锁,如果锁已经被占用,则立即返回false。

  • tryLock(timeout, timeunit):尝试获取锁,如果锁已经被占用,则等待指定的时间,直到锁被释放或超过指定的等待时间,超时则返回 返回false 。

  • lockInterruptibly():尝试获取锁,如果当前线程未被中断,则成功获取到;如果当前线程被中断,则抛出InterruptedException。这个方法允许我们在获取锁时处理中断情况,以保证程序的健壮性和正确性。

  • lockInterruptibly(long var1, TimeUnit var3):尝试获取锁,如果当前线程未被中断,则成功获取到;如果当前线程被中断,则抛出InterruptedException,如果获取锁后持有时间超过 var1 设定时间则释放锁。

  • unlock():解锁,释放持有的锁。

  • unlock(key):释放指定的锁。

  • isLocked():查询当前锁是否被锁定。

  • isHeldByCurrentThread():

这些方法可以协助你在分布式系统中实现同步访问共享资源的机制,确保数据一致性和并发问题的解决。

锁的使用

lock() 与  lockInterruptibly() 方法的使用

    RLock lock = redissonClient.getLock("lock_key");
    try {
        // 上锁
        lock.lock();
        //lock.lockInterruptibly();

        System.out.println("开始进入业务代码--->当前线程--->"+Thread.currentThread().getId());
        //业务代码
        Thread.sleep(6000);
        System.out.println("业务代码执行完毕--->当前线程--->" + Thread.currentThread().getId());
    } catch (InterruptedException e){
        System.out.println("IllegalStateException 错误--->"+ e +"--->当前线程--->" + Thread.currentThread().getId());
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("Exception 错误--->" + e + "--->当前线程--->" + Thread.currentThread().getId());
        e.printStackTrace();
    } finally {
        lock.unlock();
        System.out.println("解锁 成功--->当前线程--->" + Thread.currentThread().getId());
    }

lock.lock(-1L, TimeUnit.SECONDS) 与 lock.lockInterruptibly(5,TimeUnit.SECONDS) 方法的使用

    RLock lock = redissonClient.getLock("lock_key");
    try {
        // 上锁
        lock.lock(5, TimeUnit.SECONDS);
        //lock.lockInterruptibly(5,TimeUnit.SECONDS);
        
        System.out.println("开始进入业务代码--->当前线程--->"+Thread.currentThread().getId());
        //业务代码
        Thread.sleep(6000);
        System.out.println("业务代码执行完毕--->当前线程--->" + Thread.currentThread().getId());
    } catch (InterruptedException e){
        System.out.println("IllegalStateException 错误--->"+ e +"--->当前线程--->" + Thread.currentThread().getId());
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("Exception 错误--->" + e + "--->当前线程--->" + Thread.currentThread().getId());
        e.printStackTrace();
    } finally {
        if (lock.isHeldByCurrentThread() && lock.isLocked()){
            lock.unlock();
            System.out.println("解锁 成功--->当前线程--->" + Thread.currentThread().getId())
        }
    }

lock.tryLock() 与 lock.tryLock(5, TimeUnit.SECONDS) 方法的使用

    RLock lock = redissonClient.getLock("lock_key");
    try {
        // 上锁
        boolean b = lock.tryLock();
        //boolean b = lock.tryLock(5, TimeUnit.SECONDS);
        if (!b){
            System.out.println("获取锁不成功--->当前线程--->"+Thread.currentThread().getId());
            // 此处抛出异常 活业务处理
            return;
        }
        System.out.println("开始进入业务代码--->当前线程--->"+Thread.currentThread().getId());
        //业务代码
        Thread.sleep(6000);
        System.out.println("业务代码执行完毕--->当前线程--->" + Thread.currentThread().getId());
    } catch (InterruptedException e){
        System.out.println("IllegalStateException 错误--->"+ e +"--->当前线程--->" + Thread.currentThread().getId());
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("Exception 错误--->" + e + "--->当前线程--->" + Thread.currentThread().getId());
        e.printStackTrace();
    } finally {
        lock.unlock();
        System.out.println("解锁 成功--->当前线程--->" + Thread.currentThread().getId());
    }


文章持续更新中、希望对各位有所协助、有问题可留言 大家共同学习 !

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】Java异常抛出机制:throws声明与throw语句深度解析(2025-12-15 23:47)
【系统环境|】Java异常处理:基础与Try-Catch深度解析(2025-12-15 23:47)
【系统环境|】车辆TBOX科普 第60次 从实车测试、问题排查到日志分析(2025-12-15 23:47)
【系统环境|】DNS协议安全(2025-12-15 23:47)
【系统环境|】Redis 安全(2025-12-15 23:47)
【系统环境|】Jira Software 8.19.0(2025-12-15 23:46)
【系统环境|】TwinCAT 3 Tc2_System 库核心内容(2025-12-15 23:46)
【系统环境|】基于yocto编译编译工具链(2025-12-15 23:46)
【系统环境|】Polar2025冬季个人挑战赛【未整理好版】(2025-12-15 23:46)
【系统环境|】Redis三种服务架构详解(2025-12-15 23:46)
手机二维码手机访问领取大礼包
返回顶部