我得到一个ConcurrentModificationException CME,似乎不同于其他线程中要求的情况。我只运行一个线程。这是我的一段代码(编辑):ConcurrentModificationException:单线程,两个不同的哈希表
for(Type t : other.types.values()) {
types.put(t.getName(), t)
}
的CME在for
语句时发生。 types
的类型为Hashtable<String, Type>
,并且是类型为Obj
的对象中的非静态成员变量。 other
也是类型Obj
,并且代码段是Obj
的方法的一部分。在for
循环之前,我检查了this
和other
,this.types
和other.types
,以及this.types.values()
和other.types.values()
是成对不同的对象。 (也可以在Eclipse调试器中通过不同的对象id进行验证)。
CME是可重现的。我不知道在这种情况下会发生什么。
@编辑:代码片段来自一个更大的工具,它实际上支持多线程。线程的数量是可控的,并且仅在选择单个线程时会发生此问题。同样在其方法中,代码被两个同步包围:一个在types
上,另一个在other.types
上。所以,我想,这不是一个线程问题。
该工具在Windows和Linux上运行。我们使用1.6兼容级别的Java 1.7。 (对不起,坏码,它不是我)
我测试过了,我无法重现此行为,请在代码段中显示更多代码。顺便说一句,你怎么知道你只运行一个线程?你在使用任何库(Swing,GWT ...)吗?你在哪里运行(Windows,Android ...)? – m0skit0 2014-09-30 07:58:22