diff --git a/src/main/java/org/redisson/core/RedissonMultiLock.java b/src/main/java/org/redisson/core/RedissonMultiLock.java index 4750698e1..e79df55e1 100644 --- a/src/main/java/org/redisson/core/RedissonMultiLock.java +++ b/src/main/java/org/redisson/core/RedissonMultiLock.java @@ -30,6 +30,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; +import io.netty.util.internal.ThreadLocalRandom; import org.redisson.RedissonLock; @@ -84,7 +85,15 @@ public class RedissonMultiLock implements Lock { waitTime = 5; unit = TimeUnit.SECONDS; } else { - waitTime = unit.convert(5, TimeUnit.SECONDS); + waitTime = unit.toMillis(leaseTime); + if (waitTime <= 2000) { + waitTime = 2000; + } else if (waitTime <= 5000) { + waitTime = ThreadLocalRandom.current().nextLong(waitTime/2, waitTime); + } else { + waitTime = ThreadLocalRandom.current().nextLong(5000, waitTime); + } + waitTime = unit.convert(waitTime, TimeUnit.MILLISECONDS); } while (true) { if (tryLock(waitTime, leaseTime, unit)) {