使用 remove() 方法是否可以?我看过一篇文章,说从 remove() 方法中没有加入同步。那么我应该如何正确地从 ConcurrentHashMap 中移除一个指定的项?
示例代码:
ConcurrentHashMap<String,Integer> storage = new ConcurrentHashMap<String,Integer>();
storage.put("First", 1);
storage.put("Second", 2);
storage.put("Third",3);
//Is this the proper way of removing a specific item from a tread-safe collection?
storage.remove("First");
for (Entry<String, Integer> entry : storage.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// ...
System.out.println(key + " " + value);
}
remove
中,锁定的不是整个表,而只是其中的一个给定段(正如manouti发布的代码所示)。至少这就是我对文章及其含义的理解。因此,一切都取决于您的并发情况。不确定,如果我要确信地回答这个问题,我需要从头开始进行研究。 - peter.petrov