如果我同时修改一个Java集,我会得到一个ConcurrentModificationException。问题是堆栈跟踪表明在某个Map迭代器上遇到了修改。我现在明白,Maps是用来在java中实现Sets的,但这些细节在实现中是内部的。我相信内部的Map迭代器异常应该已经被适当地包装在一个应该被传回的Set Iterator相关异常中。为什么Java集转储堆栈上的ConcurrentModificationException异常有关Map迭代器?
我有意义还是我错过了什么?我花了两天的时间试图在代码中发现不存在的错误的Map操作,最终偶然发现了导致问题的Set操作(通过反复试验,而不是逻辑过程或文档)。我想知道我将来如何避免这种挫折。
----------- UPDATE -------------- 我的查询不是关于如何获得并发权。我的查询是如何避免被无用的堆栈跟踪消息误导。 Map迭代器异常没有业务出现在堆栈跟踪中,而不是实际的SetIterator异常,这从用户的角度来看是有意义的
克里斯,我明白为什么抛出异常。我担心的是,stack-trace将异常与Map迭代器关联,而不是Set迭代器,因为内部集合是使用java中的Maps实现的。我的问题是如何避免这种堆栈痕迹导致的误导 – 2013-02-25 07:58:00