Vermeiden von ConcurrentModificationException bei Verwendung synchronisierter Methoden
Der ConcurrentModificationException-Fehler tritt normalerweise aufgrund von Änderungen an der Sammlung auf, über die ein Iterator innerhalb der Schleife iteriert Körper. Trotz des Vorhandenseins eines synchronisierten Schlüsselworts in der Methodendeklaration kann diese Ausnahme immer noch auftreten.
Im bereitgestellten Codeausschnitt:
public synchronized X getAnotherX(){ if(iterator.hasNext()){ X b = iterator.next(); String name = b.getInputFileName(); ... return b; } else{return null;} }
Der Fehler wird wahrscheinlich aufgrund eines externen Threads ausgelöst ändert die zugrunde liegende Sammlung, während der Iterator darüber iteriert. Diese Änderung kann das Hinzufügen oder Entfernen von Elementen umfassen.
Die Lösung für dieses Problem besteht darin, sicherzustellen, dass kein anderer Thread die Sammlung während der Iteration ändern kann. Dies kann erreicht werden, indem eine Kopie der Sammlung erstellt wird, bevor darüber iteriert wird. Wenn dies jedoch nicht möglich ist, muss der Iterator auf threadsichere Weise abgerufen werden. Dies kann durch die Verwendung der Collections.synchronizedList()-Methode oder durch die Erstellung eines benutzerdefinierten Synchronisierungs-Wrappers für die Sammlung erfolgen.
Mit diesen Schritten können Sie sicherstellen, dass die ConcurrentModificationException nicht auftritt und dass die Sammlung iteriert wird sicher vorbei.
Das obige ist der detaillierte Inhalt vonWie vermeide ich „ConcurrentModificationException' bei der Verwendung synchronisierter Methoden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!