Enumeration 不会抛出 ConcurrentModificationException ,为什么?

请参阅下面的代码。

public static void main(String[] args) {

    Vector<String> v=new Vector<String>();
    v.add("Amit");
    v.add("Raj");
    v.add("Pathak");
    v.add("Sumit");
    v.add("Aron");
    v.add("Trek");

    Enumeration<String> en=v.elements();

    while(en.hasMoreElements())
    {
        String value=(String) en.nextElement();
        System.out.println(value);
        v.remove(value);

    }

}

它只打印:
Amit
Pathak
Aron

Why is this such behavior . Can we say that Enumerator is thread safe.

Edit: When working with Iterator it throws ConcurrentModificationException in single thread application.

public static void main(String[] args) {

    Vector<String> v=new Vector<String>();
    v.add("Amit");
    v.add("Raj");
    v.add("Pathak");
    v.add("Sumit");
    v.add("Aron");
    v.add("Trek");

    Iterator<String> it=v.iterator();
    while(it.hasNext())
    {
        String value=(String) it.next();
        System.out.println(value);
        v.remove(value);
    }
}

请检查。

最佳答案



因为在被调用的代码中没有抛出这个异常的路径。编辑:我指的是 Vector 类提供的实现,而不是一般的 Enumeration 接口(interface)。



从某种意义上说,它是线程安全的,即执行的代码是正确同步的。但是,我不认为您的循环产生的结果是您想要的结果。

输出的原因是 Enumeration 对象维护一个计数器,该计数器在每次调用 nextElement() 后递增。此计数器不知道您对 remove() 的调用。

关于Java 枚举与迭代器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10880137/

10-17 02:42