ConcurrentHashMap гарантирует - PullRequest
       36

ConcurrentHashMap гарантирует

0 голосов
/ 20 февраля 2019

У меня есть одновременная хэш-карта в некотором классе обслуживания:

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 обработает все записи карты (что, если add вызывается междуforeach и clear?) 2. clear не удалит записи, которые были вставлены / обновлены после foreach

Из javadoc, есть гарантия, что обновление произойдет до прочтения.Поэтому, насколько я понимаю, clear заблокирует put вызовов, однако для достижения того, что я хочу, мне понадобятся дополнительные блокировки.

1 Ответ

0 голосов
/ 20 февраля 2019

В вашем случае вам нужна дополнительная блокировка, обе операции должны быть заблокированы, метод clear также выполняет блокировку на уровне сегмента.

...