hashTable是fail-fast还是fail-safe?
是fail-fast还是fail-safe?
根据jdk1.8的官方文档,我们可以确定是fail-fast机制的,那为什么网上有很多人说是fail-safe机制的呢?
和有一个相同的迭代器 ,都是实现Map接口得来的。用法: = map.().(); 众所周知的 是fail-fast的,的 自然也是fasil-fast的,而还有另外一个迭代器 这个迭代器是fail-safe的,为什么这么说呢,试一下下面的案例就知道了。
public void rangeIterator(Hashtable ht){Iterator iterator = ht.keySet().iterator();while(iterator.hasNext()){ht.remove("name");String k = (String)iterator.next(); //这里抛出java.util.ConcurrentModificationExceptionSystem.out.println("it-k=>"+k);}}public void rangeEnumeration(Hashtable ht){Enumeration enumeration = ht.keys();while (enumeration.hasMoreElements()){ht.remove("name");String k = (String)enumeration.nextElement();System.out.println("em-k=>"+k);}}
通过以上测试我们可以看出,在遍历时将遍历到的元素删除,使用不报错,而使用抛出(fail-fast标志性异常) 。
总结以上,是fail-fast机制的,他有两个迭代器, 使用fail-fast机制、 使用fail-safe机制。
参考: