我試圖了解 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
提交
取消