如果我同时修改一个 Java Set,我会得到一个 ConcurrentModificationException。问题是堆栈跟踪表明在某个 Map 迭代器上遇到了修改。我现在明白 Maps 是用来在 java 中实现 Sets 的,但这些细节是实现内部的。我相信内部 Map 迭代器异常应该被正确地包装在应该被传回的 Set Iterator 相关异常中。
我有道理还是我错过了什么?我只花了两天时间试图在代码中找到不存在的错误 Map 操作,但最终偶然发现了导致问题的 Set 操作(通过反复试验,而不是通过逻辑过程或文档放大)。我想知道将来如何避免这种挫败感。
------------更新------------- 我的查询不是关于如何获得正确的并发性。我的问题是如何避免被这种无用的堆栈跟踪消息误导。Map Iterator 异常没有业务显示在堆栈跟踪中,而不是实际的 SetIterator 异常,这从用户的角度来看是有意义的