#7107·redisson

java.lang.IllegalMonitorStateException: null

Author: DeathLoveCreated May 6, 2026Updated Sep 9, 2026
Labelsquestion

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  WARN-[sson-netty-2-27] io.netty.util.concurrent.DefaultPromise  : 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]