当前位置:   article > 正文

Redisson常见问题_attempt to unlock lock, not locked by current thre

attempt to unlock lock, not locked by current thread by node id

目录

1.问题描述

问题一描述

问题二描述

2.问题原因分析

问题一原因分析

问题二原因分析

3.解决方案

问题一解决方案

问题二解决方案


1.问题描述

问题一描述

        attempt to unlock lock, not locked by current thread by node id: d04c7c1e-6f56-4c59-9983-bc390dec9a49 thread-id: 506

问题二描述

        设置等待时间为10秒,过期时间10秒,出现多次执行

rLock.tryLock(10, 10, TimeUnit.SECONDS);

2.问题原因分析

问题一原因分析

        在thread-1还没有结束的时候,也就是在thread-1在获得锁但是还没有释放锁的时候, `thread-2由于被别的线程中断停止了等待从lock.tryLock的阻塞状态中返回继续执行接下来的逻辑,并且由于尝试去释放一个属于线程thread-1的锁而抛出了一个运行时异常导致该线程thread-2结束了, 然而thread-2完成了一系列操作后,线程thread-1才释放了自己的锁. 所以thread-2并没有获得锁,却执行了需要同步的内容,还尝试去释放锁。那解决方式我们就知道了,当前线程加的锁由当前线程去解锁,也就是说当我们使用lock.unlock的时候加上线程的判断即可。

问题二原因分析

        这个时候如果任务3秒就执行完成了,但是其他线程又将在等待的10秒内获取到锁继续执行

3.解决方案

问题一解决方案

  1. RLock lock = redissonClient.getLock(key);
  2. if(lock.isLocked()){ // 是否还是锁定状态
  3. if(lock.isHeldByCurrentThread()){ // 时候是当前执行线程的锁
  4. lock.unlock(); // 释放锁
  5. }
  6. }

问题二解决方案

   将等待时间设置为0

rLock.tryLock(0, 10, TimeUnit.SECONDS);

   

原文参考:线程并发redisson使用遇到的坑_KingdomCoder-CSDN博客

redisson 分布式锁 waitTime 小坑_Andy86869的博客-CSDN博客_redisson 等待时间

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

闽ICP备14008679号