mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-08-06 22:23:12 +00:00
feat[map]: fast concurrent segment lock
This commit is contained in:
+17
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user