HashMap迭代过程中fail-fast 机制失败经历!!
2009-03-04 11:09
417 查看
]class Test { public static void main(String[] args) { java.util.HashMap<Object,String> map=new java.util.HashMap<Object,String>(); map.put(new Object(), "a"); map.put(new Object(), "b"); java.util.Iterator<Object> it=map.keySet().iterator(); while(it.hasNext()){ it.next(); map.put("", ""); } System.out.println(map.size()); } }
上面这段代码运行过程中会抛出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”机制检查没有执行到,所以程序会安全通过。本例简单化了使用情景,一般是在多线程环境中。
相关文章推荐
- Java学习笔记 14 快速失败fail-fast机制
- HashMap 多线程处理之 Fail-Fast机制
- HashMap 多线程处理之 Fail-Fast机制:
- HashMap的resize和Fail-Fast机制
- fail-fast(快速失败/报错机制)-ConcurrentModificationException
- 快速失败机制--fail-fast
- 快速失败fail-fast机制
- HashMap 多线程处理之 Fail-Fast机制
- Java集合框架中的快速失败(fail—fast)机制
- java中的fail-fast(快速失败)机制
- Java集合(16)--快速失败机制(Fail-Fast)
- fail-fast快速失败机制分析
- HashMap 多线程处理之 Fail-Fast机制:
- fail-fast机制
- Java集合迭代器之fail-fast机制
- 快速失败(fail-fast)和安全失败(fail-safe)的区别
- 由ArrayList来深入理解Java中的fail-fast机制
- fail-fast机制
- ArrayList三种遍历方式的效率以及fail-fast机制
- 常见容错机制:failover、failfast、failback、failsafe