当前位置:网站首页>Redisson分布式锁解锁异常
Redisson分布式锁解锁异常
2022-07-08 00:28:00 【知知之之】
问题现象
程序中的redission执行unlock()报错如下:
java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id:
从报错信息可知:尝试解锁,而不是由当前线程按节点 ID 锁定
问题复现
//获取锁对象
RLock lock = redissonClient.getLock(key);
try{
//获取锁
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
if (!tryLock) {
//抛出业务异常
}
}catch(){
//捕获异常
}finally{
//解锁
lock.unlock();
}排查过程
如上代码,线程无论是否有获取锁,都是需要去执行解锁方法,当线程没有获得锁,执行unlock()就会报java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id:错误
解决方案
1、在解锁时增加判断
//判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}2、优化代码
在执行unlock()确保线程已经获得锁
//获取锁对象
RLock lock = redissonClient.getLock(key);
boolean tryLock;
try {
tryLock = lock.tryLock(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
throw new Exception("获取分布式锁失败,请稍后再试");
}
if (!tryLock) {
throw new Exception("请稍后再试");
}
try{
//抛出业务异常
}catch(){
//捕获异常
}finally{
//解锁
lock.unlock();
}边栏推荐
- Redux使用
- mysql/mariadb怎样生成core文件
- Uniapp one click Copy function effect demo (finishing)
- 3. Multi agent reinforcement learning
- Matlab code on error analysis (MAE, MAPE, RMSE)
- 【目标跟踪】|atom
- break algorithm---刷题map
- Usage of xcolor color in latex
- Introduction to natural language processing (NLP) based on transformers
- 子矩阵的和
猜你喜欢

About snake equation (3)

ANSI / NEMA- MW- 1000-2020 磁铁线标准。. 最新原版

Partage d'expériences de contribution à distance

LeetCode 练习——剑指 Offer 36. 二叉搜索树与双向链表

From starfish OS' continued deflationary consumption of SFO, the value of SFO in the long run

Usage of hydraulic rotary joint

pb9.0 insert ole control 错误的修复工具

Voice of users | understanding of gbase 8A database learning

Understanding of prior probability, posterior probability and Bayesian formula

Redis cluster
随机推荐
保姆级教程:Azkaban执行jar包(带测试样例及结果)
Sword finger offer II 041 Average value of sliding window
Working principle of stm32gpio port
Usage of xcolor color in latex
nacos-微服务网关Gateway组件 +Swagger2接口生成
如果时间是条河
The difference between distribution function and probability density function of random variables
Deep learning website
腾讯游戏客户端开发面试 (Unity + Cocos) 双重轰炸 社招6轮面试
qt-使用自带的应用框架建立--hello world--使用min GW 32bit
ROS 问题(topic types do not match、topic datatype/md5sum not match、msg xxx have changed. rerun cmake)
QT build with built-in application framework -- Hello World -- use min GW 32bit
碳刷滑环在发电机中的作用
什么样的MES系统才是好系统
项目经理有必要考NPDP吗?我告诉你答案
[SolidWorks] modify the drawing format
Anaconda3 download address Tsinghua University open source software mirror station
写一个纯手写的qt的hello world
Sum of submatrix
Matlab code on error analysis (MAE, MAPE, RMSE)