1. 程式人生 > >list執行remove和add方法時,報java.util.ConcurrentModificationException的原因

list執行remove和add方法時,報java.util.ConcurrentModificationException的原因

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
//AbstractCollection和List都繼承了Collection
protected transient int modCount = 0;
private class Itr implements Iterator<E> { //內部類Itr
int cursor = 0;
int lastRet = -1;
int expectedModCount = modCount;

public boolean hasNext() {
return cursor != size();
}

public E next() {
checkForComodification(); //特別注意這個方法
try {
E next = get(cursor);
lastRet = cursor++;
return next;
} catch(IndexOutOfBoundsException e) {
checkForComodification();
throw new NoSuchElementException();
}
}

public void remove() {
if (lastRet == -1)
throw new IllegalStateException();
checkForComodification();

try {
AbstractList.this.remove(lastRet); //執行remove物件的操作
if (lastRet < cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount; //重新設定了expectedModCount的值,避免了ConcurrentModificationException的產生
} catch(IndexOutOfBoundsException e) {
throw new ConcurrentModificationException();
}
}

final void checkForComodification() {
if (modCount != expectedModCount) //當expectedModCount和modCount不相等時,就丟擲ConcurrentModificationException
throw new ConcurrentModificationException();
}
}
}

相關推薦

list執行removeadd方法java.util.ConcurrentModificationException原因

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> { //AbstractCollection和List都繼承了Collection protect

為什麽使用 Arrays.asList()得到的集合使用remove( ) add( )方法會拋出unsupportedoperationexception(不支持操作異常)

操作 err move lan 16px exceptio operation amp span  這是由於:    Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。 Arrays$ArrayList

List使用add方法生成的list是最後加入的資料的重複

  近來專案中用到list的add方法,執行報錯,新增重複項,debug以後發現生成的list中,都是最後一條資料的重複。後來發現只需要改一句就可以避免這個錯誤。 MachineBean machineBean = new MachineBean(); Li

Javajava執行jar java.lang.UnsupportedClassVersionError

問題現象: java執行jar時,報 java.lang.UnsupportedClassVersionError java  -jar  main.jar -h 192.168.221.171  -u tdmp -p tdmp -d orcl  -t tdmpta

在tomcat上應用webjava.lang.NullPointerException錯誤的解決方法

Java程式碼:   exception   org.apache.jasper.JasperException: java.lang.NullPointerException       org.apache.jasper.servlet.JspServletWr

java專案執行中出現記憶體洩漏問題java.lang.OutOfMemoryError: PermGen space

一開始我以為是記憶體不足導致的,但是檢視伺服器記憶體還有很多。所以不是記憶體問題。 然後查到java執行時涉及到資源分配的幾個重要引數: Xss:每個執行緒的stack大小(棧) Xmx:JAVA HEAP的最大值、預設為實體記憶體的1/4 Xms:JAVA HE

遍歷集合出現異常:java.util.ConcurrentModificationException的處理方案

0.出現異常的原因:集合在迭代過程中對其中的元素進行修改操作。以下是解決方法1.java遍歷Map時,對其元素進行刪除package net.nie.test;  import java.util.HashMap;  import java.util.Iterator;  i

Queue介面分析:addoffer區別removepoll方法到底啥區別

往佇列中新增元素有兩個方法,分佈是add和offer方法,兩者的入參和返回值都一樣,或許很多同學都奇怪,為什麼,要有這兩個功能類似(都是新增元素),但方法名不一樣的方法,看看原始碼的註釋 以下為Queue介面中方法定義: ``` public interface Queue<E

一個類有兩個方法其中一個是同步的另一個是非同步的; 現在又兩個執行緒AB請問:當執行緒A訪問此類的同步方法執行緒B是否能訪問此類的非同步方法

一個類有兩個方法,其中一個是同步的,另一個是非同步的;現在又兩個執行緒A和B,請問:當執行緒A訪問此類的同步方法時,執行緒B是否能訪問此類的非同步方法? 答案:可以 驗證 package com.my.test2; public class ClassA { public syn

詳講:C#快速匯出多個sheet到excel的兩種方法(CellRange方法 解決了(匯入外部表不是預期的格式)

C# 匯出的表載入時報錯:外部表不是預期的格式。的解決方案 在網絡卡找了一些Excel匯出的方法,大部分能匯出,但時不能將匯出的Excel匯入。總是報:外部表不是預期的格式 找了好久終於找到了解決方案。 這是本人整理修改後的的可以實現匯出匯入的方法。供大家學習參考,方法就是用一個沒問題的

extjs 迴圈執行多個非同步請求引數後臺以及相關問題衍生問題的處理

在Extjs中,非同步請求的寫法: Ext.Ajax.request({ url: '***.action', //async: false, params: { p1: v1, p2: v2 ... }, success: function(resp

關於執行PIwordcount的map0%reduce0%問題解決方法

記得:沒金剛鑽別攬瓷器活!當然怎麼說呢。。4個site.xml檔案配置別搞的太高大上,用預設的就好了,這樣就不會導致你機器尤其是master節點卡在map0%和reduce0%了。。。。為了明白這問題,一搞這問題又是一天啊。。。我的電腦配置:3臺騰訊雲:1核2G,50G;以下

RadioGroup呼叫check(id)方法onCheckedChanged方法執行多次解決辦法

RadioGroup bottomMenuBar = (RadioGroup) findViewById(R.id.bottomMenuBar); bottomMenuBar.setOnCheckedChangeListener(this); bottomMenuBar.c

mysql執行大量的操作無法連接數據庫的錯誤

mysql執行大量的操作時 報無法連接數據庫的錯誤 問題:mysql執行大量的插敘操作時,報無法連接數據庫的錯誤,錯誤詳情如下:Fatal error: Uncaught exception ‘PDOException‘ with message ‘SQLSTATE[HY000] [2003] Can

運行用例錯Unknow Error:Element xxx is not clickable……的解決方法

cut 處理 ebe 將他 最好 executor tro path img 通常這種情況是由於在點擊該元素時,js更換了元素屬性造成的。 所以可以采用js的方式進行處理 方法如下: WebDriver driver = new FirefoxDriver(); Web

java基礎 靜態 static 問在多態中子類靜態方法覆蓋父類靜態方法父類引用調用的是哪個方法

xtend java pos main 靜態方法 show extends ava pri 多態 package com.swift.jiekou; public class Jicheng_Tuotai_jingtai_diaoyong { publ

tcp連接BROKEN PIPE錯誤的原因以及解決方法

tcp 技術 sizeof com http 發送消息 spl 系統 alt 問題: 寫了一個server和一個client,UNIX套接字的,server不斷接收消息並打印出來,client是一個交互程序,輸入一個消息回車發送,接著又可以輸入消息。出問題了:當server

解決windows下python2python3共存pip失效

fat ML creat htm -- error 安裝 .exe launch 使用pip安裝時報錯, pip install SendKeysFatal error in launcher: Unable to create process using ‘"c:\lib

安裝oracle 11g啟動服務出現錯誤找不到OracleMTSRecoveryService的解決方法

是否 卸載 名稱 window7 ntc oca 高級 很多 bho 很多人在安裝orcl數據庫時,出現很多報錯,我也不例外,因上次數據庫出現問題,無法修復,只能從新安裝,無奈的是,安裝時報啟動服務出現錯誤,找不到OracleMTSRecoveryService錯MMP,心

jenkins 部署 並執行npm run dev 專案execute shell自動結束程序問題

使用 jenkins 部署 vue (npm run dev)專案時,部署狀態是顯示部署成功,但是服務沒有成功啟動,在做程序服務監控的時候發現,jenkins部署時候服務也啟動成功了,但是jenkins部署成功後 自動kill殺死或結束該程序和該程序的衍生的程序,那麼就讓jenkins不