Heim >Java >javaLernprogramm >Wie kann ich ConcurrentModificationException beim Iterieren und Ändern einer Java-Liste vermeiden?
Die ConcurrentModificationException tritt auf, wenn mehrere Threads gleichzeitig eine veränderbare Sammlung ändern und dabei häufig deren interne Konsistenz verletzen. Um dieses Konzept zu veranschaulichen, analysieren wir einen Codeausschnitt, der auf diese Ausnahme stößt.
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); } }
Dieser Code versucht, eine Liste zu durchlaufen und dabei Elemente hinzuzufügen. Die Ausnahme wird jedoch ausgelöst, weil der ListIterator erstellt wurde, bevor die Elemente hinzugefügt wurden.
Um diesen Fehler zu vermeiden, können wir den Code wie folgt ändern:
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); } }
In diesem überarbeiteten Code: Der Listeniterator wird erstellt, nachdem die Elemente zur Liste hinzugefügt wurden, um die Konsistenz sicherzustellen. Ein ListIterator ermöglicht die Änderung der Liste während der Iteration. Es ist jedoch wichtig, dass er nach der Initialisierung der Liste erstellt und zwischen Erstellung und Verwendung nicht geändert wird. Dadurch wird sichergestellt, dass die Liste während der gesamten Iteration in einem gültigen Zustand bleibt.
Das obige ist der detaillierte Inhalt vonWie kann ich ConcurrentModificationException beim Iterieren und Ändern einer Java-Liste vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!