我在某些服务类中具有并发哈希图:
class MyClass implements Flushable {
private volatile ConcurrentHashMap<Integer, Object> hashMap = ...
public void add(int id, Object value) {
hashMap.put(id, value);
}
@Override
public void flush() throws IOException {
hashMap.foreach((k, v) -> ...)
hashMap.clear();
}
}
我是否需要做一些额外的锁定以确保: 1. flush将处理所有映射条目(如果在foreach和clear之间调用add会怎样?) 2. clear不会删除在foreach之后插入/更新的条目
通过javadoc,可以保证在读取之前进行更新。据我了解,clear
将阻止put
的调用,但是要达到我想要的功能,我需要一些附加的锁。
答案 0 :(得分:0)
在这种情况下,您需要任何额外的锁定,这两个操作都应该被锁定,clear方法也可以在段级别上锁定。