在多线程代码中,我在第3行看到了ConcurrentModificationException
line 1: Map<String, String> attributMap = new HashMap<>();
line 2: if(attributeMap.size() > 0)
line 3: tagMyEvent(new HashMap<>(attributeMap));
java.util.ConcurrentModificationException
1 at java.util.HashMap$HashIterator.nextEntry(HashMap.java:851)
2 at java.util.HashMap$EntryIterator.next(HashMap.java:891)
3 at java.util.HashMap$EntryIterator.next(HashMap.java:890)
4 at java.util.HashMap.putAllForCreate(HashMap.java:485)
5 at java.util.HashMap.<init>(HashMap.java:257)
! 6 at tagMyEvent (test.java:line 3)
我猜错的唯一原因是:
将上述代码改为此,解决问题:
line 1: Map<String, String> attributMap = new HashMap<>();
line 2: if(attributeMap.size() > 0)
line 3: tagMyEvent(new ConcurrentHashMap<>(attributeMap));
OR
line 1: Map<String, String> attributMap = new ConcurrentHashMap<>();
line 2: if(attributeMap.size() > 0)
line 3: tagMyEvent(new ConcurrentHashMap<>(attributeMap));
如果没有,有人可以提出解决方案,或者说明究竟是什么导致了这个问题。
提前致谢。
答案 0 :(得分:0)
如果有的话,“attributeMap”是需要并发的那个 - 因为如果它只是一个常规的HashMap,它仍然会拒绝在“新的ConcurrentHashMap”内部进行迭代,而我们什么也没有实现...... < / p>
那就是说,我也建议