Heim  >  Artikel  >  Java  >  Wie kann ich gleichzeitige Änderungsausnahmen beim Iterieren und Ändern von Java-Listen vermeiden?

Wie kann ich gleichzeitige Änderungsausnahmen beim Iterieren und Ändern von Java-Listen vermeiden?

Susan Sarandon
Susan SarandonOriginal
2024-11-21 09:43:10377Durchsuche

How Can I Avoid Concurrent Modification Exceptions When Iterating and Modifying Java Lists?

Concurrent Modification Exception in Java

Die „Concurrent Modification“-Ausnahme tritt auf, wenn mehrere Threads versuchen, eine gemeinsam genutzte Datenstruktur zu ändern, z Liste gleichzeitig. Dies kann zu unerwarteten Ergebnissen und Datenbeschädigungen führen.

Bedenken Sie den folgenden Java-Code:

import java.util.*;

public class SomeClass {
    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);
    }
}

Dieser Code versucht, eine Liste zu durchlaufen und sie gleichzeitig zu ändern. Bei der Ausführung wird die „Concurrent Modification Exception“ ausgelöst. Dies liegt daran, dass der Listeniterator erstellt wurde, bevor Änderungen an der Liste vorgenommen wurden.

Um diese Ausnahme zu vermeiden, sollten Sie sicherstellen, dass jeweils nur ein Thread die Liste ändern kann. Sie können dies tun, indem Sie den Iterator erst erstellen, nachdem alle Änderungen an der Liste vorgenommen wurden. Der korrekte Code lautet:

import java.util.*;

public class SomeClass {

    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);

    }
}

Indem Sie den Iterator erstellen, nachdem die Liste geändert wurde, stellen Sie sicher, dass während der Iteration nur ein einzelner Thread Zugriff auf die Liste hat. Dadurch wird verhindert, dass die „Concurrent Modification Exception“ auftritt.

Das obige ist der detaillierte Inhalt vonWie kann ich gleichzeitige Änderungsausnahmen beim Iterieren und Ändern von Java-Listen vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn