不确定这里究竟出了什么问题:
while(itr.hasNext())
{
Stock temp =itr.next();
}
此代码在itr.next()中抛出ConcurrentModificationException;
迭代器的初始化是
private Iterator<Stock> itr=stockList.iterator();
有什么想法吗?
[基本代码直接从教授的幻灯片中复制]
答案 0 :(得分:5)
这可能是因为两个原因而发生的。
以下代码可能导致ConcurrentModificationException
Iterator<Stock> itr = stockList.iterator();
while(itr.hasNext())
{
Stock temp = itr.next();
stockList.add(new Stock()); // Causes ConcurrentModificationException
stockList.remove(0) //Causes ConcurrentModificationException
}
答案 1 :(得分:1)
其他一些线程正在修改底层集合?我怀疑有一些代码高于你向我们展示的导致问题的代码:调用iterator()和循环之间的集合的mod。
答案 2 :(得分:0)
最合理的原因是某些代码在您获得迭代器后修改了基础集合。
表格javadoc:
此类返回的迭代器 iterator和listIterator方法是 失败快速:如果列表是结构性的 之后随时修改 除了以外的任何方式创建迭代器 通过迭代器自己删除或 添加方法,迭代器将抛出一个 ConcurrentModificationException的。从而, 面对并发 修改,迭代器失败 快速而干净,而不是 冒着任意,不确定的风险 在一个不确定的时间的行为 未来。