欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java.util.ConcurrentModificationException 解決方法

 更新時(shí)間:2016年11月24日 11:59:12   投稿:lqh  
這篇文章主要介紹了 java.util.ConcurrentModificationException 解決方法的相關(guān)資料,需要的朋友可以參考下

 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) 通過(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.*;

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

最新評(píng)論