第三次学JAVA再学不好就吃翔(part79)--并发修改异常产生的原因及解决方案
生活随笔
收集整理的這篇文章主要介紹了
第三次学JAVA再学不好就吃翔(part79)--并发修改异常产生的原因及解决方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習筆記,僅供參考,有錯必糾
文章目錄
- 集合
- 并發修改異常產生的原因及解決方案
- ConcurrentModificationException
- 解決方案
集合
并發修改異常產生的原因及解決方案
在這個博客中,我們用一個案例學習這個知識點。
- 舉個例子
現在,我有一個集合,我想判斷這個集合中是否有"Gui"這個元素,如果有我就再添加一個"Yang"。
package com.guiyang.object;import java.util.List; import java.util.ListIterator; import java.util.ArrayList; import java.util.Iterator;@SuppressWarnings({ "rawtypes", "unchecked" }) public class Demo3_List {public static void main(String[] args) {List list = new ArrayList();list.add("a");list.add("b");list.add("c");list.add("d");list.add("Gui");list.add("e");Iterator lit = list.iterator();while(lit.hasNext()) {String string = (String)lit.next();System.out.println(string);if ("Gui".equals(string)) {list.add("Yang");}}System.out.println(list);}}報錯信息:
Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.ArrayList$Itr.checkForComodification(Unknown Source)at java.util.ArrayList$Itr.next(Unknown Source)at com.guiyang.object.Demo3_List.main(Demo3_List.java:24)我們看到,java拋出了一個ConcurrentModificationException異常(遍歷的同時進行修改)
ConcurrentModificationException
ConcurrentModificationException異常,中文名為并發修改異常。當方法檢測到對象的并發修改,但不允許這種修改時,拋出此異常。 例如,某個線程在 Collection 上進行迭代時,通常不允許另一個線性修改該 Collection。通常在這些情況下,迭代的結果是不確定的。如果檢測到這種行為,一些迭代器實現(包括 JRE 提供的所有通用 collection 實現)可能選擇拋出此異常。
解決方案
利用List集合特有的迭代方式ListIterator的特有功能add進行元素的添加。
- ListIterator方法
返回此列表元素的列表迭代器(按適當順序)
- 舉個例子
輸出:
a b c d Gui e [a, b, c, d, Gui, Yang, e]總結
以上是生活随笔為你收集整理的第三次学JAVA再学不好就吃翔(part79)--并发修改异常产生的原因及解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三次学JAVA再学不好就吃翔(part
- 下一篇: TP-Link TL-WDR7400 无