簡體   English   中英

故障安全與故障快速迭代器(向量)

[英]Fail safe vs Fail fast iterators (Vectors)

我正在研究快速失敗和安全失敗迭代器,因此我想到了這個問題。 我不確定我的理解是否正確。

Vector是Java中的同步線程安全集合對象。 因此,當我嘗試獲取vector的迭代器時,它是一個失敗的快速迭代器。 當我在矢量對象上使用此迭代器並對矢量進行任何更改時,它將引發ConcurrentModificationExeption。 但是由於vector是線程安全的,因此應提供故障安全迭代器。

帶向量的Java為什么不是這種情況。 就像並發HashMap一樣,它具有線程安全迭代器。

是的,Vector是線程安全的,而vector的迭代是故障安全的。這是一個遺留類,先引入1.0版本,然后再進行發布。Sun對此進行了耐火工程學,並將其添加到List接口中,以便我們可以使用所有的方法List接口和Vector,如果我們將使用迭代器迭代Vector對象,則將引發並發ModificationException,但如果我們將使用Enumeration Interface迭代向量,則將不會引發任何並發Modification Exception。示例:在本示例中,主線程從vector中迭代元素和子線程正在更新現有的矢量對象,並且我們沒有收到任何current並發ModificationException

public class MyThread extends Thread{
static Vector<String> vector = new Vector<>();
public static void main(String[] args) {

    vector.add("Sachine");
    vector.add("Rahul");
    vector.add("Virat");
    vector.add("Dhoni");
    vector.add("Manish");
    MyThread t = new MyThread();
    t.start();
    Enumeration<String> it = vector.elements();
    while (it.hasMoreElements()) {
        String name = (String) it.nextElement();
        System.out.println(name);
    }
    System.out.println(vector);

}
@Override
public void run() {
    vector.add("Shikhar");
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM