feat[map]: fast concurrent segment lock

This commit is contained in:
godotg
2023-03-25 15:44:14 +08:00
parent 2b0ce755bd
commit 2b2083fe80
@@ -17,6 +17,7 @@ import io.netty.util.collection.LongObjectHashMap;
import java.util.*;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.function.BiConsumer;
/**
@@ -168,6 +169,22 @@ public class ConcurrentHashMapLongObject<V> implements Map<Long, V> {
}
}
@Override
public void forEach(BiConsumer<? super Long, ? super V> action) {
for (var i = 0; i < buckets; i++) {
var readLock = locks[i].readLock();
var map = maps.get(i);
readLock.lock();
try {
for (var entry : map.entries()) {
action.accept(entry.key(), entry.value());
}
} finally {
readLock.unlock();
}
}
}
@Override
public Set<Long> keySet() {
throw new UnsupportedOperationException();