我对此源代码有疑问。外部for循环不迭代:
java.util.ConcurrentModificationException at java.util.Hashtable $ Enumerator.next(Hashtable.java:1387)
…
Java Collection类是快速失败的,这意味着如果在某个线程遍历它时将更改Collection,则iterator.next()将抛出ConcurrentModificationException。
在您的情况下,您正在迭代哈希表并更改相同的值,因此抛出此异常。当你指定iteratingHashTable = myVar时;两个变量都指向相同的。
您可以通过以下方式避免此异常:
1)如果您使用的是> = JDK1.5,则可以使用ConcurrentHashMap和CopyOnWriteArrayList(推荐方法)
2)您可以使用synchronized块在迭代时锁定表。
如果在创建迭代器之后的任何时候对Hashtable进行结构修改,除了通过迭代器自己的remove方法之外,迭代器将抛出ConcurrentModificationException。
当您使用普通集合类(而不是并发集合类)时,不允许对for循环中的列表进行任何修改。因为快速失败的行为。这意味着,如果对相同的列表或映射进行任何修改,在迭代集合的项时,它将抛出concurrentModificationException。
要解决上述问题,请使用concurrentHashMap或再创建一个hashMap,并在该映射中添加或替换这些元素,并在完成for循环后将这些元素添加到原始映射中。
我想但我不确定:
iteratingHashTable = myVar;
正在引用相同的对象,所以当你在下面的代码中尝试使用时 myVar 和 iteratingHashTable 对于不同的操作,您始终使用相同的对象。
myVar
iteratingHashTable