【发布时间】:2014-11-04 16:04:48
【问题描述】:
我正在使用 google guava multimap,想知道是否可以允许并发写入到地图的不同部分,或者我是否必须同步所有访问?当我说不同的部分时,我指的是多重映射中不同的键值对。
以下示例代码是否正确?
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();
}
}
【问题讨论】:
-
Guava 目前不支持多线程访问多图;你必须同步整个shebang。
标签: java synchronization locking guava