ConcurrentHashMap保证

时间:2019-02-20 13:29:50

标签: java concurrency synchronization locking concurrenthashmap

我在某些服务类中具有并发哈希图:

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的调用,但是要达到我想要的功能,我需要一些附加的锁。

1 个答案:

答案 0 :(得分:0)

  

在这种情况下,您需要任何额外的锁定,这两个操作都应该被锁定,clear方法也可以在段级别上锁定。