[Java] Was ist die Ausnahme für gleichzeitige Änderungen?

Programmierstudientagebuch

  1. November 2020 Als ich den Code in Java schrieb und überprüfte, ob er den Test verwendete, bekam ich eine Ausnahme namens "java.util.ConcurrentModificationException", sodass ich zusammenfassen werde, was die ConcurrentModificationException ist und was zu tun ist.

Was ist ConcurrentModificationException?

Javadoc of ConcurrentModificationException lautet wie folgt.

Diese Ausnahme wird ausgelöst, wenn eine Methode, die eine parallele Änderung in einem Objekt erkennt, eine solche Änderung nicht zulässt.

Grundsätzlich wird verwendet, um zuerst fehlzuschlagen, um früh zu versagen und eine Ausnahme auszulösen, wenn sich etwas, das wiederholt, ändert </ b>. Das heißt, eine Ausnahme ist aufgetreten, bevor der iterative Prozess abgeschlossen ist.

Die for-each-Anweisung verwendet Iterator, der nicht sehr redundant ist. Sie können jedoch auf zusätzliche Methoden wie "remove ()" zugreifen, wenn Sie Ihren Test für die Verwendung von Iterator umgestalten. Die Methode remove verursacht keine ConcurrentModificationException, daher ist es in Ordnung, sie während eines iterativen Prozesses aufzurufen.

Bei meinem Code gab es ein Problem mit dem Umgang mit ArrayList. ArrayList und Iterator enthalten intern die "Anzahl der Änderungen". Der von der Iterator () -Methode von ArrayList generierte Iterator prüft, ob beim Starten der next () -Methode usw., die beim Drehen mit for verwendet wird, eine Abweichung vorliegt, und aufgrund einer Abweichung eine Ausnahme von ConcurrentModificationException Trat auf. Es gab die folgende Beschreibung in Javadoc ArrayList.

Der von den Iterator- und ListIterator-Methoden dieser Klasse zurückgegebene Iterator ist ausfallsicher. Nachdem der Iterator erstellt wurde, löst der Iterator eine ConcurrentModificationException aus, wenn die Liste durch eine andere Methode als die Methode remove oder add des Iterators selbst strukturell geändert wird. Auf diese Weise löst der Iterator bei parallelen Änderungen sofort und sauber eine Ausnahme aus, um das Risiko eines unvorhersehbaren Verhaltens an unvorhersehbaren Punkten in der Zukunft zu vermeiden. Im Allgemeinen ist es bei asynchronen parallelen Änderungen nicht möglich, das ausfallsichere Verhalten des Iterators zu garantieren, da keine zuverlässige Garantie gegeben werden kann. Der ausfallsichere Iterator löst eine ConcurrentModificationException aus, die auf dem Best-Effort-Prinzip basiert. Daher ist es ein Fehler, ein Programm zu schreiben, dessen Genauigkeit von dieser Ausnahme abhängt. "Das ausfallsichere Verhalten des Iterators sollte nur zum Erkennen von Fehlern verwendet werden."

Verweise

Class ConcurrentModificationException Vermeiden Sie ConcurrentModificationException in Java

Recommended Posts

[Java] Was ist die Ausnahme für gleichzeitige Änderungen?
Was ist java
Was ist Java <>?
Was ist Java-Kapselung?
Was ist Java-Technologie?
Was ist Java API-Java?
[Java] Was ist flatMap?
[Java] Was ist ArrayList?
Was ist Java Assertion? Zusammenfassung.
Was ist eine Java-Sammlung?
[Java] Was ist jaee j2ee?
[Java] Was ist Klassenvererbung?
[Java-Grundlagen] Was ist Klasse?
Was ist Java-Fluchtanalyse?
Was ist JVM (Java Virtual Machine)?
Was ist Thread-sicher (mit Java)
Was ist ein Lambda-Ausdruck (Java)
Was ist eine Klasse in der Java-Sprache (3 /?)
Was ist das beste Lesen von Dateien (Java)
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist Java und Entwicklungsumgebung (MAC)
Was ist eine Klasse in der Java-Sprache (2 /?)
Was ist die Hauptmethode in Java?
Java-Ausnahme StackTrace wird im Neuzustand ermittelt
Java-Ausnahmebehandlung?
Was ist null? ]]
Was ist Schlüsselumhang?
Was ist Jackson?
Was ist Selbst
Was ist Jenkins?
Was ist ArgumentMatcher?
Was ist IM-Jonglieren?
Was ist params
Was ist SLF4J?
Was ist Fassade? ??
Was ist Gradle?
Was ist centOS?
[Java] Ausnahmebehandlung
Was ist RubyGem?
☾ Java / Ausnahmebehandlung
Was ist before_action?
Was ist Docker?
Informationen zur Behandlung von Java-Ausnahmen
Behandlung von Java-Ausnahmen
Was ist Byte?
Was ist Tomcat?
Was ist das Java Servlet / JSP MVC-Modell?
Was ist der flüchtige Modifikator für Java-Variablen?
Was ist Docker-Compose?
Was ist ein Konstruktor?
[Java] Wirf eine Ausnahme aus
Was ist harte Codierung?
Was ist ein Stream?
Was ist die Erlaubnis verweigert?
Was ist Instanzsteuerung?
Was ist Spring Tools 4?
Was ist ein Operator?