[英]Locking ConcurrentHashMap for an exclusive read
我有几个线程可以将信息保存到我的ConcurrentHashMap<K,V>
。 我应该在父线程中拍摄整个 Map 的快照,处理其中的信息并最终从所有值和键中清空它。
我如何确保在读取期间(在父线程中),在我完成之前不会被任何写入它的子线程更新? 是否可以用信号量或互斥锁锁定这个数据结构?
尝试这样的事情。 使用监视器保护 map field
,因此当您拍摄快照时,没有其他人可以将值放入其中。
public class Example<K, V> {
private final Map<K, V> map = new HashMap<>();
private final Object monitor = new Object();
public Object snapshot() {
synchronized (monitor) {
// take the snapshot and return it
}
}
public V put(K key, V value) {
synchronized (monitor) {
return map.put(key, value);
}
}
}
同样在此示例中,您可以通过使用简单的HashMap
而不是ConcurrentHashMap
来简化它,因为您有监视器保护对该字段的访问。
使用ReadWriteLock
。
这给了你一对锁:
尽管有这些名称,但没有理由必须将这些锁专门用于读写:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.