diff --git a/store/src/main/java/org/apache/rocketmq/store/lock/AdaptiveBackOffSpinLockImpl.java b/store/src/main/java/org/apache/rocketmq/store/lock/AdaptiveBackOffSpinLockImpl.java index b4abb082718..1dfbd4718b8 100644 --- a/store/src/main/java/org/apache/rocketmq/store/lock/AdaptiveBackOffSpinLockImpl.java +++ b/store/src/main/java/org/apache/rocketmq/store/lock/AdaptiveBackOffSpinLockImpl.java @@ -23,6 +23,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -51,7 +52,7 @@ public class AdaptiveBackOffSpinLockImpl implements AdaptiveBackOffSpinLock { private final List tpsTable; - private final List> threadTable; + private final List> threadTable; private int swapCriticalPoint; @@ -65,8 +66,8 @@ public AdaptiveBackOffSpinLockImpl() { this.locks.put(BACK_OFF_SPIN_LOCK, new BackOffSpinLock()); this.threadTable = new ArrayList<>(2); - this.threadTable.add(new ConcurrentHashMap<>()); - this.threadTable.add(new ConcurrentHashMap<>()); + this.threadTable.add(ConcurrentHashMap.newKeySet()); + this.threadTable.add(ConcurrentHashMap.newKeySet()); this.tpsTable = new ArrayList<>(2); this.tpsTable.add(new AtomicInteger(0)); @@ -78,7 +79,7 @@ public AdaptiveBackOffSpinLockImpl() { @Override public void lock() { int slot = LocalTime.now().getSecond() % 2; - this.threadTable.get(slot).putIfAbsent(Thread.currentThread(), Byte.MAX_VALUE); + this.threadTable.get(slot).add(Thread.currentThread()); this.tpsTable.get(slot).getAndIncrement(); boolean state; do {