首頁 >Java >java教程 >迭代和修改 Java 清單時如何避免 ConcurrentModificationException?

迭代和修改 Java 清單時如何避免 ConcurrentModificationException?

DDD
DDD原創
2024-11-29 13:25:11511瀏覽

How Can I Avoid ConcurrentModificationException When Iterating and Modifying a Java List?

理解 Java 中的並發修改異常

當多個執行緒並發修改可變集合時會發生 ConcurrentModificationException,通常會違反其內部一致性。為了說明這個概念,讓我們分析遇到此異常的程式碼片段。

import java.util.*;

public class ConcurrentModificationExample {

    public static void main(String[] args) {
        List<String> s = new ArrayList<>();
        ListIterator<String> it = s.listIterator();

        for (String a : args)
            s.add(a);

        if (it.hasNext())
            String item = it.next();

        System.out.println(s);
    }
}

此程式碼嘗試在向清單新增元素時迭代列表。但是,由於 ListIterator 是在新增元素之前創建的,因此會引發異常。

為了避免此錯誤,我們可以修改程式碼如下:

import java.util.*;

public class ConcurrentModificationExample {

    public static void main(String[] args) {
        List<String> s = new ArrayList<>();

        for(String a : args)
            s.add(a);

        ListIterator<String> it = s.listIterator();    
        if(it.hasNext()) {  
            String item = it.next();   
        }  

        System.out.println(s);

    }
}

在修改後的程式碼中,列表迭代器在元素新增到列表後創建,以確保一致性。 ListIterator 允許在迭代期間修改列表,但至關重要的是它是在列表初始化之後創建的,並且在創建和使用之間不能修改。這可確保清單在整個迭代過程中保持有效狀態。

以上是迭代和修改 Java 清單時如何避免 ConcurrentModificationException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn