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 ausgelöst, weil ein externer Thread die zugrunde liegende Sammlung ändert, 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 das Erstellen eines benutzerdefinierten Synchronisierungs-Wrappers für die Sammlung erfolgen.
Durch Ausführen dieser Schritte können Sie sicherstellen, dass die ConcurrentModificationException nicht auftritt und dass die Sammlung iteriert wird sicher vorbei.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3