diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java index 29a7be5799..a895677e33 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java @@ -267,11 +267,11 @@ public class RouterChain { } if (notify) { if (loopPermitNotify.tryAcquire()) { - loopPool.submit(new NotifyLoopRunnable(true)); + loopPool.submit(new NotifyLoopRunnable(true, loopPermitNotify)); } } else { if (loopPermit.tryAcquire()) { - loopPool.submit(new NotifyLoopRunnable(false)); + loopPool.submit(new NotifyLoopRunnable(false, loopPermit)); } } } @@ -279,14 +279,16 @@ public class RouterChain { class NotifyLoopRunnable implements Runnable { private final boolean notify; + private final Semaphore loopPermit; - public NotifyLoopRunnable(boolean notify) { + public NotifyLoopRunnable(boolean notify, Semaphore loopPermit) { this.notify = notify; + this.loopPermit = loopPermit; } @Override public void run() { - loopPermitNotify.release(); + loopPermit.release(); buildCache(notify); } }