[英]Concurrent Modification Exception thrown by .next from Iterator
不確定這里究竟出了什么問題:
while(itr.hasNext())
{
Stock temp =itr.next();
}
此代碼在itr.next()中拋出ConcurrentModificationException;
迭代器的初始化是private Iterator<Stock> itr=stockList.iterator();
有任何想法嗎?
[基本代碼直接從教授的幻燈片中復制]
這可能是因為兩個原因而發生的。
以下代碼可能導致ConcurrentModificationException
Iterator<Stock> itr = stockList.iterator();
while(itr.hasNext())
{
Stock temp = itr.next();
stockList.add(new Stock()); // Causes ConcurrentModificationException
stockList.remove(0) //Causes ConcurrentModificationException
}
其他一些線程正在修改底層集合? 我懷疑上面有代碼,而不是你向我們展示的導致問題的代碼:調用iterator()和循環之間的集合的mod。
最合理的原因是一些代碼在您獲得迭代器后修改了底層集合。
表單javadoc :
此類的iterator和listIterator方法返回的迭代器是快速失敗的:如果在創建迭代器之后的任何時候對列表進行結構修改,除了通過迭代器自己的remove或add方法之外,迭代器將拋出ConcurrentModificationException。 因此,在並發修改的情況下,迭代器快速而干凈地失敗,而不是在未來的未確定時間冒着任意的,非確定性行為的風險。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.