diff --git a/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/ConcurrentHashMapLongObject.java b/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/ConcurrentHashMapLongObject.java index 3ce66d8d..f194eacf 100644 --- a/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/ConcurrentHashMapLongObject.java +++ b/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/ConcurrentHashMapLongObject.java @@ -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 implements Map { } } + @Override + public void forEach(BiConsumer 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 keySet() { throw new UnsupportedOperationException();