HashMap迭代过程中fail-fast 机制失败经历!!

来源:互联网 发布:日剧花样少年少女 知乎 编辑:程序博客网 时间:2024/06/05 12:30

上面这段代码运行过程中会抛出java.util.ConcurrentModificationException,这是Fail Fast”机制在启作用,Collection结构在其返回遍历器(Iterator)后的任何时候发生变化(这种变化不包括遍历器本身调用remove方法移除元素)后,将会导致遍历器抛出异常的机制,保证集合中元素至始至终要保持一至,如果发生改变,就要通知客户端。若将上面代码中 map.put(new Object(), "b");这句注释掉,程序会顺利通过。因为Fail Fast检查只是在 KeyIterator 中的next方法进行,些方法又调用了HashIterator中的nextEntry来返回一个entry。KeyIterator 中的hasNext方法只是进行了return next != null;这一句来判断是否有下一个entry。问题就出现在这里,如果原来Iterator中只有一个entry,在第一次迭代过程中对它进行了修改后,hasNext返回false结束了迭代过程,netx方法中的Fail Fast”机制检查没有执行到,所以程序会安全通过。本例简单化了使用情景,一般是在多线程环境中。

原创粉丝点击