java.util.ConcurrentModificationException 解决办法
在使用iterator.hasNext()操作迭代器的時(shí)候,如果此時(shí)迭代的對(duì)象發(fā)生改變,比如插入了新數(shù)據(jù),或者有數(shù)據(jù)被刪除。
則使用會(huì)報(bào)以下異常:
Java.util.ConcurrentModificationException
??????? at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
??????? at java.util.HashMap$KeyIterator.next(HashMap.java:828)
例如以下程序(轉(zhuǎn)自互聯(lián)網(wǎng)):
[java]?view plaincopy原因:Iterator做遍歷的時(shí)候,HashMap被修改(bb.remove(ele), size-1),Iterator(Object ele=it.next())會(huì)檢查HashMap的size,size發(fā)生變化,拋出錯(cuò)誤ConcurrentModificationException。
解決辦法:
1) 通過(guò)Iterator修改Hashtable
while(it.hasNext()) {
Object ele = it.next();
??????????? it.remove();
}
2) 根據(jù)實(shí)際程序,您自己手動(dòng)給Iterator遍歷的那段程序加鎖,給修改HashMap的那段程序加鎖。
3) 使用“ConcurrentHashMap”替換HashMap,ConcurrentHashMap會(huì)自己檢查修改操作,對(duì)其加鎖,也可針對(duì)插入操作。
import java.util.concurrent.*;
轉(zhuǎn)載于:https://www.cnblogs.com/llhl/p/9648676.html
總結(jié)
以上是生活随笔為你收集整理的java.util.ConcurrentModificationException 解决办法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Bootstrap-插件使用】Jcro
- 下一篇: 初始angular框架(1)