出現(xiàn)java.util.ConcurrentModificationException 問題及解決辦法
java.util.ConcurrentModificationException 解決辦法
前言:
在使用iterator.hasNext()操作迭代器的時候,如果此時迭代的對象發(fā)生改變,比如插入了新數(shù)據(jù),或者有數(shù)據(jù)被刪除。
則使用會報以下異常:
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做遍歷的時候,HashMap被修改(bb.remove(ele), size-1),Iterator(Object ele=it.next())會檢查HashMap的size,size發(fā)生變化,拋出錯誤ConcurrentModificationException。
解決辦法:
1) 通過Iterator修改Hashtable
while(it.hasNext()) {
Object ele = it.next();
it.remove();
}
2) 根據(jù)實(shí)際程序,您自己手動給Iterator遍歷的那段程序加鎖,給修改HashMap的那段程序加鎖。
3) 使用“ConcurrentHashMap”替換HashMap,ConcurrentHashMap會自己檢查修改操作,對其加鎖,也可針對插入操作。
import java.util.concurrent.*;
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- Java遍歷集合報錯ConcurrentModificationException的原因分析與解決方法
- Java ConcurrentModificationException 深度剖析開發(fā)調(diào)試日志的解決方案
- Java?報錯?java.util.ConcurrentModificationException:?null?的原因及解決方案
- Java ConcurrentModificationException異常解決案例詳解
- 詳解Java刪除Map中元素java.util.ConcurrentModificationException”異常解決
- Java源碼解析ArrayList及ConcurrentModificationException
- java.util.ConcurrentModificationException 解決方法
- java 集合并發(fā)操作出現(xiàn)的異常ConcurrentModificationException
- Java導(dǎo)致ConcurrentModificationException所有原因
相關(guān)文章
最全面的JVM優(yōu)化經(jīng)驗(yàn)總結(jié)
這篇文章主要介紹了最全面的JVM優(yōu)化經(jīng)驗(yàn)總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下2019-06-06
Java中負(fù)數(shù)的絕對值竟然不一定是正數(shù)
這篇文章主要介紹了Java中負(fù)數(shù)的絕對值竟然不一定是正數(shù),文中給大家提到Java 中怎么把負(fù)數(shù)轉(zhuǎn)換為正數(shù),需要的朋友可以參考下2021-07-07
Mybatis 實(shí)現(xiàn)動態(tài)組裝查詢條件,仿SQL模式
這篇文章主要介紹了Mybatis 實(shí)現(xiàn)動態(tài)組裝查詢條件,仿SQL模式的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Maven發(fā)布封裝到中央倉庫時候報錯:no default secret key
這篇文章主要介紹了Maven發(fā)布封裝到中央倉庫時候報錯:no default secret key,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Java對zip,rar,7z文件帶密碼解壓實(shí)例詳解
在日常業(yè)務(wù)中,會遇到一些瑣碎文件需要打包到一個壓縮包中上傳,業(yè)務(wù)方在后臺接收到壓縮包后自行解壓,然后解析相應(yīng)文件。而且可能涉及安全保密,因此會在壓縮時帶上密碼,要求后臺業(yè)務(wù)可以指定密碼進(jìn)行解壓。本文將用Java解決這一問題,需要的可以參考一下2022-07-07

