我在一些服务类中有并发hashmap:
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调用,然而,为了达到我想要的效果,我需要一些额外的锁。
发布于 2019-02-20 23:01:35
在你的例子中,你需要任何额外的锁定,这两个操作都应该被锁定,
方法也在段级别上进行锁定。
https://stackoverflow.com/questions/54787500
复制相似问题