来自Iterator的.next引发的并发修改异常

ren*_*kon 3 java concurrency exception

不确定这里究竟出了什么问题:

    while(itr.hasNext())
    {
        Stock temp =itr.next();

    }
Run Code Online (Sandbox Code Playgroud)

此代码在itr.next()中抛出ConcurrentModificationException;

迭代器的初始化是 private Iterator<Stock> itr=stockList.iterator();

有任何想法吗?

[基本代码直接从教授的幻灯片中复制]

Sre*_*esh 5

这可能是因为两个原因而发生的.

  1. 另一个线程是直接或通过其迭代器更新stockList
  2. 在同一个线程中,也许在这个循环本身内部,修改了stockList(参见下面的示例)

以下代码可能导致ConcurrentModificationException

Iterator<Stock> itr = stockList.iterator();
 while(itr.hasNext()) 
    { 
        Stock temp = itr.next(); 

        stockList.add(new Stock()); // Causes ConcurrentModificationException 

        stockList.remove(0) //Causes ConcurrentModificationException 
    } 
Run Code Online (Sandbox Code Playgroud)