有条件地从ConcurrentHashMap中删除元素(线程安全)

时间:2018-11-21 17:17:02

标签: java multithreading

我有一个ConcurrentHashMap<String, Instant>,可以同时访问。我会说

map.entrySet().removeIf(e -> e.getValue().isBefore(Instant.now()));

将是线程安全的实现,因为它永远不会删除在谓词求值之后和实际删除之前,另一个线程又获得了新String的{​​{1}}。即使有多个线程将带有即时信息的字符串放入此映射,也不会删除Instant之后带有即时信息的条目。那是因为

  1. Instant.now()是原始地图上的视图
  2. entrySet()使用removeIf()中支持entrySet()的迭代器
  3. Iterator.remove()通过调用remove(Object, Object)
  4. 删除removeIf() / String条目

我不确定(3)。谁可以帮助我?

0 个答案:

没有答案