gpt4 book ai didi

java - 如何允许对 Guava 多重映射的不同部分(使用不同的键)进行并发写入

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:20 25 4
gpt4 key购买 nike

我正在使用 google guava multimap,想知道是否可以允许并发写入 map 的不同部分,或者我是否必须同步所有访问?当我说不同的部分时,我指的是多重映射中的不同键值对。

以下示例代码正确吗?

  class Key {}
class Value {}

private Multimap<Key, Value> multimap = HashMultimap.create();

private final Striped<Key> locks = Striped.readWriteLock(100);

public void write(final Key key, final Collection<Value> values) {
Lock writeLock = locks.get(key).writeLock();
writeLock.lock();

try {
for (Value value : values) {
multimap.put(key, value);
}
} finally {
writeLock.unlock();
}
}

public Collection<Value> read(final Key key) {
Lock readLock = locks.get(key).readLock();
readLock.lock();

try {
// Collect values
} finally {
readLock.unlock();
}
}

最佳答案

如果您需要这个,您最好使用 ConcurrentHashMap<K, Set<V>>并手动复制多重映射语义。

您也许可以创建 MultimapView扩展的类型 Multimap并提供 Map<K, Collection<V>> 的 View - 我不确定 Guava 不提供这一点是否有原因(它可能效率不高?)。我在Multimaps中看到的一切是复制工厂。

关于java - 如何允许对 Guava 多重映射的不同部分(使用不同的键)进行并发写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com