java.util.ConcurrentModificationException 解決方法
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)):
mport java.util.*;
public class Main
{
public static void main(String args[])
{
Main main = new Main();
main.test();
}
public void test()
{
Map bb = new HashMap();
bb.put("1", "wj");
bb.put("2", "ry");
Iterator it = bb.keySet().iterator();
while(it.hasNext()) {
Object ele = it.next();
bb.remove(ele); //wrong
}
System.out.println("Success!");
}
}
原因:Iterator做遍歷的時(shí)候,HashMap被修改(bb.remove(ele), size-1),Iterator(Object ele=it.next())會(huì)檢查HashMap的size,size發(fā)生變化,拋出錯(cuò)誤ConcurrentModificationException。
解決辦法:
1) 通過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.*;
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Java遍歷集合報(bào)錯(cuò)ConcurrentModificationException的原因分析與解決方法
- Java ConcurrentModificationException 深度剖析開發(fā)調(diào)試日志的解決方案
- Java?報(bào)錯(cuò)?java.util.ConcurrentModificationException:?null?的原因及解決方案
- Java ConcurrentModificationException異常解決案例詳解
- 詳解Java刪除Map中元素java.util.ConcurrentModificationException”異常解決
- Java源碼解析ArrayList及ConcurrentModificationException
- 出現(xiàn)java.util.ConcurrentModificationException 問題及解決辦法
- java 集合并發(fā)操作出現(xiàn)的異常ConcurrentModificationException
- Java導(dǎo)致ConcurrentModificationException所有原因
相關(guān)文章
淺談openstack中使用linux_bridge實(shí)現(xiàn)vxlan網(wǎng)絡(luò)
這篇文章主要介紹了淺談openstack中使用linux_bridge實(shí)現(xiàn)vxlan網(wǎng)絡(luò),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
CentOS 6.4下安裝部署OpenStack云計(jì)算平臺(tái)的方法
現(xiàn)在好多公司都使用Openstack,所以也想著學(xué)習(xí)下用OpenStack云計(jì)算平臺(tái),這篇文章給加詳細(xì)介紹了CentOS 6.4下安裝部署OpenStack云計(jì)算平臺(tái)的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-10-10
什么是OpenStack 開源的云計(jì)算管理平臺(tái)項(xiàng)目
OpenStack是一個(gè)開源的云計(jì)算管理平臺(tái)項(xiàng)目,由幾個(gè)主要的組件組合起來完成具體工作。OpenStack支持幾乎所有類型的云環(huán)境,項(xiàng)目目標(biāo)是提供實(shí)施簡單、可大規(guī)模擴(kuò)展、豐富、標(biāo)準(zhǔn)統(tǒng)一的云計(jì)算管理平臺(tái)2016-11-11
OpenStack手動(dòng)分布式部署Keystone(Queens版)
這篇文章主要介紹了OpenStack手動(dòng)分布式部署Keystone(Queens版),Keystone是OpenStack框架中負(fù)責(zé)管理身份驗(yàn)證服務(wù)訪問規(guī)則和服務(wù)令牌功能的組件,需要的朋友可以參考下2023-03-03
OpenStack虛擬機(jī)快照和增量備份實(shí)現(xiàn)方法
快照針對(duì)要保存的數(shù)據(jù)分為內(nèi)存快照和磁盤快照,內(nèi)存快照就是保存當(dāng)前內(nèi)存的數(shù)據(jù),磁盤快照就是保存硬盤的數(shù)據(jù),這篇文章主要介紹了OpenStack虛擬機(jī)快照和增量備份實(shí)現(xiàn),需要的朋友可以參考下2022-04-04
基于CentOS的OpenStack環(huán)境部署詳細(xì)教程(OpenStack安裝)
這篇文章主要介紹了基于CentOS的OpenStack環(huán)境部署(OpenStack安裝),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
openstack云計(jì)算keystone組件工作流程及服務(wù)關(guān)系
這篇文章主要介紹了openstack云計(jì)算keystone組件工作流程及服務(wù)關(guān)系,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04

