我有一个ConcurrentHashMap<String, Instant>
,可以同时访问。我会说
map.entrySet().removeIf(e -> e.getValue().isBefore(Instant.now()));
将是线程安全的实现,因为它永远不会删除在谓词求值之后和实际删除之前,另一个线程又获得了新String
的{{1}}。即使有多个线程将带有即时信息的字符串放入此映射,也不会删除Instant
之后带有即时信息的条目。那是因为
Instant.now()
是原始地图上的视图entrySet()
使用removeIf()
中支持entrySet()
的迭代器Iterator.remove()
通过调用remove(Object, Object)
removeIf()
/ String
条目
我不确定(3)。谁可以帮助我?