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

2024-06-03 13:20

本文主要是介绍attempt to unlock lock, not locked by current thread by node id错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题

Exception in thread "thread-21" java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id: 59f44274-17cb-40cd-b83b-08ed1ed3ffc7 thread-id: 73at org.redisson.RedissonBaseLock.lambda$unlockAsync$1(RedissonBaseLock.java:320)at org.redisson.misc.RedissonPromise.lambda$onComplete$0(RedissonPromise.java:187)at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)at org.redisson.misc.RedissonPromise.trySuccess(RedissonPromise.java:82)at org.redisson.RedissonBaseLock.lambda$evalWriteAsync$0(RedissonBaseLock.java:232)at org.redisson.misc.RedissonPromise.lambda$onComplete$0(RedissonPromise.java:187)at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)at org.redisson.misc.RedissonPromise.trySuccess(RedissonPromise.java:82)at org.redisson.command.CommandBatchService.lambda$executeAsync$7(CommandBatchService.java:335)at org.redisson.misc.RedissonPromise.lambda$onComplete$0(RedissonPromise.java:187)at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571)at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550)at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)at org.redisson.misc.RedissonPromise.trySuccess(RedissonPromise.java:82)at org.redisson.command.RedisCommonBatchExecutor.handleResult(RedisCommonBatchExecutor.java:164)at org.redisson.command.RedisExecutor.checkAttemptPromise(RedisExecutor.java:464)at org.redisson.command.RedisExecutor.lambda$execute$3(RedisExecutor.java:172)at org.redisson.misc.RedissonPromise.lambda$onComplete$0(RedissonPromise.java:187)at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)at org.redisson.misc.RedissonPromise.trySuccess(RedissonPromise.java:82)at org.redisson.client.handler.CommandDecoder.decodeCommandBatch(CommandDecoder.java:318)at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:210)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:137)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:113)at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:507)at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366)at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:748)

翻译

java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id: 59f44274-17cb-40cd-b83b-08ed1ed3ffc7 thread-id: 70

当前线程没有被锁,但是企图去释放锁。

解决办法

判断是否已锁,且锁是否被当前线程持有

  /*** 释放锁* 判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有*/if (lock.isLocked() && lock.isHeldByCurrentThread()) {log.info("线程:" + Thread.currentThread().getName() + "准备释放锁");lock.unlock();}

加锁解锁参考代码
参考代码

@ResourceRedissonClient redissonClient;private int ticket = 100;private final static String LOCK_KEY = "TICKET_KEY";@Overridepublic void hello(String name) {//定义锁RLock lock = redissonClient.getLock(LOCK_KEY);try {//尝试加锁,最大等待时间2秒(如果还没等到锁,则失败),最大持锁时间10秒(防止意外情况无法释放)if (lock.tryLock(2000, 10000, TimeUnit.MILLISECONDS)) {int t = new Random().nextInt(4000);log.info("线程:" + Thread.currentThread().getName() + "获得了锁,占锁时间:" + t + " 毫秒");Thread.sleep(t);log.info("剩余数量:{}", --ticket);} else {log.info("线程:" + Thread.currentThread().getName() + "未获取到锁");}} catch (Exception e) {log.error("程序执行异常:{}", e);} finally {/*** 释放锁* 判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有*/if (lock.isLocked() && lock.isHeldByCurrentThread()) {log.info("线程:" + Thread.currentThread().getName() + "准备释放锁");lock.unlock();}}}

这篇关于attempt to unlock lock, not locked by current thread by node id错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1027104

相关文章

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

MySQL的隐式锁(Implicit Lock)原理实现

《MySQL的隐式锁(ImplicitLock)原理实现》MySQL的InnoDB存储引擎中隐式锁是一种自动管理的锁,用于保证事务在行级别操作时的数据一致性和安全性,本文主要介绍了MySQL的隐式锁... 目录1. 背景:什么是隐式锁?2. 隐式锁的工作原理3. 隐式锁的类型4. 隐式锁的实现与源代码分析4

MySQL中Next-Key Lock底层原理实现

《MySQL中Next-KeyLock底层原理实现》Next-KeyLock是MySQLInnoDB存储引擎中的一种锁机制,结合记录锁和间隙锁,用于高效并发控制并避免幻读,本文主要介绍了MySQL中... 目录一、Next-Key Lock 的定义与作用二、底层原理三、源代码解析四、总结Next-Key L

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服