Implement random wait time in RedissonRedLock & RedissonMultiLock lock method (backported)

2.2.x
Nikita 8 years ago
parent e0b215a801
commit ffd4be9bdf

@ -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)) {

Loading…
Cancel
Save