hashTable是fail-fast还是fail-safe?

是fail-fast还是fail-safe?

hashTable是fail-fast还是fail-safe?

文章插图
根据jdk1.8的官方文档,我们可以确定是fail-fast机制的,那为什么网上有很多人说是fail-safe机制的呢?
和有一个相同的迭代器,都是实现Map接口得来的 。用法:= map.().(); 众所周知的是fail-fast的,的 自然也是fasil-fast的,而还有另外一个迭代器这个迭代器是fail-safe的,为什么这么说呢,试一下下面的案例就知道了 。
【hashTable是fail-fast还是fail-safe?】
hashTable是fail-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机制 。
参考: