[英]Is Enumeration in java is Fail-safe? if yes how?
java中有故障安全迭代器,它創建集合的副本以迭代以提供故障安全行為。
枚舉適用於遺留 Java 類 Vector、Stack 和 HashTable 等(這些是同步集合)。
java中的枚舉如何是故障安全的,它如何提供故障安全行為? 它是否也為迭代創建了集合的副本?
我不會稱Enumeration
故障安全。
至少不是Vector
的elements()
方法返回的實現:
public Enumeration<E> elements() {
return new Enumeration<E>() {
int count = 0;
public boolean hasMoreElements() {
return count < elementCount;
}
public E nextElement() {
synchronized (Vector.this) {
if (count < elementCount) {
return elementData(count++);
}
}
throw new NoSuchElementException("Vector Enumeration");
}
};
}
如果在迭代時修改Vector
則此實現可能會導致不良行為而不會引發異常。
例如,以下代碼將導致無限循環,其中每次調用els.nextElement ()
將返回相同的元素"a"
。
Vector<String> vec = new Vector<> ();
vec.add ("a");
vec.add ("b");
vec.add ("c");
Enumeration<String> els = vec.elements ();
while (els.hasMoreElements ()) {
System.out.println (els.nextElement ());
vec.add (0,"d");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.