假設在我的類中有兩個方法,分別是writeToMap()
和processKey()
,並且這兩個方法都由多個線程調用。 writeToMap
是一種在hashmap中寫入內容的方法,processKey()
用於基於HashMap
的keySet
執行某些操作。Java中的ConcurentModificationException HashMap
在processKey中,我首先複製了originalMap
,然後纔得到密鑰集。
new HashMap<String, Map<String,String>(originalMap).get("xx").keySet();
但我仍然得到ConcurrentModificationException
即使我總是複製hashmap。有什麼問題?
那麼有什麼解決方案? – Bear
最直接的解決方案是對原始地圖使用線程安全的地圖。例如,您可以使用ConcurrentHashMap。那麼你不需要創建一個副本。另外請注意,由於值本身就是映射,因此如果它們被同時訪問和修改,它們也需要線程安全。 – sjlee
我在想,是ConcurrentHashMap真的解決了這個問題。從我的unsentanding,ConcurrentHashMap只是確保get和put是原子的。 – Bear