java.lang.IllegalMonitorStateException: null
redission: 3.16.3
code:
CRSGlobalLock.lock(CmsConstants.TX_KEY + bookStateDTO.getSourceId(), () -> { processor.bookSuccess(id); processor.notifyResult(id); }, 30, true);
`public static boolean lock(String key, Runnable runnable, int expire,boolean isWait) {
log.debug("加锁开始,加锁方式:redis");
return lockRedis(key, runnable, expire, expire, true,isWait);
}
public static boolean lockRedis(String key, Runnable runnable, int wait, int expire, boolean isThrow, boolean isWait) {
boolean locked = false;
RLock mylock = redisson.getLock(key);
try {
log.debug("开始加锁");
// 尝试加锁,最多等待wait秒,上锁以后expire秒自动解锁 isWait 是否等待
locked = mylock.tryLock(isWait ? wait : 0, expire, TimeUnit.SECONDS);
if (locked) {
runnable.run();
}
} catch (CmsBizException e) {
log.error(e.getMessage(), e);
throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
if (isThrow) {
throw new CmsBizException(e.getMessage());
}
} finally {
if (mylock != null && locked && mylock.isHeldByCurrentThread()) {
mylock.unlock();
}
}
return locked;
}`error log: 2026-05-06 10:38:49.890 [33m WARN[m-[sson-netty-2-27] [33mio.netty.util.concurrent.DefaultPromise [m : An exception was thrown by org.redisson.misc.RedissonPromise$$Lambda$1096/1257962769.operationComplete() java.lang.IllegalMonitorStateException: null at java.lang.Object.notifyAll(Native Method) ~[?:1.8.0_202] at io.netty.util.concurrent.DefaultPromise.checkNotifyWaiters(DefaultPromise.java:628) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:614) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at org.redisson.misc.RedissonPromise.trySuccess(RedissonPromise.java:82) ~[redisson-3.16.3.jar:3.16.3] at org.redisson.RedissonBaseLock.lambda$evalWriteAsync$0(RedissonBaseLock.java:232) ~[redisson-3.16.3.jar:3.16.3] at org.redisson.misc.RedissonPromise.lambda$onComplete$0(RedissonPromise.java:187) ~[redisson-3.16.3.jar:3.16.3] at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:551) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at org.redisson.misc.RedissonPromise.trySuccess(RedissonPromise.java:82) ~[redisson-3.16.3.jar:3.16.3] at org.redisson.command.CommandBatchService.lambda$executeAsync$7(CommandBatchService.java:335) ~[redisson-3.16.3.jar:3.16.3] at org.redisson.misc.RedissonPromise.lambda$onComplete$0(RedissonPromise.java:187) ~[redisson-3.16.3.jar:3.16.3] at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:570) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:549) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104) ~[netty-all-4.1.45.Final.jar:4.1.45.Final] at org.redisson.misc.RedissonPromise.trySuccess(RedissonPromise.java:82) ~[redisson-3.16.3.jar:3.16.3] at org.redisson.command.RedisCommonBatchExecutor.handleResult(RedisCommonBatchExecutor.java:163) ~[redisson-3.16.3.jar:3.16.3] at org.redisson.command.RedisExecutor.checkAttemptPromise(RedisExecutor.java:447) ~[redisson-3.16.3.jar:3.16.3] at org.redisson.command.RedisExecutor.lambda$execute$3(RedisExecutor.java:169) ~[redisson-3.16.3.jar:3.16.3] at org.redisson.misc.RedissonPromise.lambda$onComplete$0(RedissonPromise.java:187) ~[redisson-3.16.3.jar:3.16.3] at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:551) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104) [netty-all-4.1.45.Final.jar:4.1.45.Final] at org.redisson.misc.RedissonPromise.trySuccess(RedissonPromise.java:82) [redisson-3.16.3.jar:3.16.3] at org.redisson.client.handler.CommandDecoder.decodeCommandBatch(CommandDecoder.java:318) [redisson-3.16.3.jar:3.16.3] at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:210) [redisson-3.16.3.jar:3.16.3] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:137) [redisson-3.16.3.jar:3.16.3] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:113) [redisson-3.16.3.jar:3.16.3] at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:498) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:377) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:377) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-all-4.1.45.Final.jar:4.1.45.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.45.Final.jar:4.1.45.Final] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_202]
Source: redisson/redisson