Heim >Java >javaLernprogramm >Wie kann ich gleichzeitige Änderungsausnahmen beim Iterieren und Ändern von Java-Listen vermeiden?
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!