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

相关文章

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解