我试图了解 ConcurrentHashMap 的工作原理。我找到了一个例子,但我无法理解。这是它的代码:Map<String, Object> myData = new HashMap<String, Object>();myData.put("A", 1);myData.put("B", 2);for (String key : myData.keySet()) { myData.remove(key);}这将在运行时抛出异常ConcurrentModificationException。但是,此代码使用ConcurrentHashMap将正常工作:Map<String, Object> myData = new ConcurrentHashMap<String, Object>();myData.put("A", 1);myData.put("B", 2);for (String key : myData.keySet()) } myData.remove(key);}有人可以向我解释为什么 ConcurrentHashMap 允许在 HashMap 引发异常时删除键吗?谢谢
1 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
这只是 的功能之一ConcurrentHashMap。引用文档:
类似地,迭代器、拆分器和枚举返回反映哈希表在创建迭代器/枚举时或之后的某个时间点的状态的元素。它们不会抛出 ConcurrentModificationException。
ConcurrentHashMap但是,并没有真正这样做来支持您的用例。这样做是为了允许一个线程中的迭代与其他线程中的修改同时发生。
如果这是您使用的唯一原因ConcurrentHashMap,那么您可能应该重新考虑,因为它比HashMap. 你最好在使用它之前制作一个密钥集的副本,如下所示:
Map<String, Object> myData = new HashMap<String, Object>();
myData.put("A", 1);
myData.put("B", 2);
for(String key: myData.keySet().toArray(new String[0]))
myData.remove(key);
添加回答
举报
0/150
提交
取消