java问题 如图,同样是Map集合的遍历为什么左图进行操作时报错了,右图没有报错,求大神

如题所述

你好!

两个运行环境不同,是造成代码运行不同的主要原因。

左图应为jdk1.7或以下版本,右图为jdk1.8。

    ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

    产生的原因:
    迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
    简单描述就是:迭代器遍历元素的时候,通过集合是不能修改元素的。

jdk1.8中解决了之前HashMap扩容引发的线程不安全,但它仍然属于非线程安全的。

将HashMap替换为ConcurrentHashMap,可以解决环境问题所引起的问题。

希望对你有帮助!

追问

大神啊,左图是2015年的代码,右图是我今天(2019年)写的代码,我就怀疑2019年和2015年的代码会有不同,又不知道在哪里看,不敢确定

追答

找到原因,解决问题就好。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-16
代码不是已经执行完了吗
第2个回答  2019-07-16
代码贴完了?
相似回答