Redisson普通锁

Redisson官方文档

 @GetMapping("/hello")
    public String testRedissonClient(){
        //根据名字获取锁  只要锁名一样  就是同一把锁   第一个线程拿到这个锁 加锁 第二个线程拿到的就是 一个正在运行的加了锁的锁
        RLock mylock = redissonClient.getLock("my-lock");

        //加锁   redisson 加的锁会自动给锁设置一个30秒的过期时间TTL  避免没有执行解锁代码造成的死锁
        //mylock.lock();//这个方法是一个阻塞式等待方法  如果拿不到锁一直在这里等待
        mylock.lock(10, TimeUnit.SECONDS);
        /**
         *    注意   如果给锁设置过期时间10秒  业务执行需要30秒 业务还没执行完锁就会被释放 不会自动续期
         *    所以 给锁设置的自动过期时间必须大于业务执行的时间
         *
         *    那我感觉还是不设置锁的自动过期时间 比较好  我又不知道这个业务到底要执行多久  网速快网速慢也有影响
         *    反正 不设置锁的过期时间  业务没执行完锁自动续期 业务执行完了不续期锁也就过期了
         *
         *    但是老师说实战还是要显式的设置 锁的自动过期时间 设长一点就行
         *
         *  源码:
         *    设置自动过期时间 lock()方法里 发送给redis脚本 进行占锁
         *    如果没设置自动过期时间  只要占锁成功就会启动一个定时任务  定时续期  续的时间就是看门狗时间
         */
        try{
            //1.如果业务超长  redisson会自动给锁续期  续成还有30秒过期  看门狗机制  避免业务还没执行完锁就自动过期
            //2.加锁的业务只要运行完成,就不会给当前锁续期 即使不手动解锁  锁也会在30秒后过期
            System.out.println("加锁成功,执行业务代码。。。。"+Thread.currentThread().getId());
            Thread.sleep(30000);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println("释放锁。。。。"+Thread.currentThread().getId());
            mylock.unlock();
        }

        return "hello";
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值