Wyjątek ConcurrentModificationException występuje, gdy podjęto próbę jednoczesnej modyfikacji obiektu, gdy jest to niedopuszczalne. Ten wyjątek zwykle pojawia się, gdy pracujemy z klasami Java Collection. Na przykład - wątek nie może modyfikować kolekcji, gdy jakiś inny wątek iteruje nad nią.
Jak naprawić wyjątek współbieżnej modyfikacji?
Możemy również uniknąć wyjątku współbieżnej modyfikacji w środowisku jednowątkowym. Możemy użyć metody remove iteratora, aby usunąć obiekt z bazowego obiektu kolekcji. Ale w tym przypadku możesz usunąć tylko ten sam obiekt, a nie żaden inny obiekt z listy.
Jak zapobiec wyjątkowi jednoczesnej modyfikacji na mapie?
use ConcurrentHashMap. nadal używaj prostej HashMap, ale buduj nową mapę dla każdej modyfikacji i przełączaj mapy za kulisami (synchronizacja operacji przełączania lub użycie AtomicReference)
Która metoda iteratora zgłasza jednoczesny wyjątek modyfikacji?
Jeśli wywołamy sekwencję metod na obiekcie, który narusza jego kontrakt, obiekt wyrzuci ConcurrentModificationException. Na przykład: jeśli podczas iteracji po kolekcji spróbujemy bezpośrednio zmodyfikować tę kolekcję, to podany szybki iterator zgłosi ten wyjątek ConcurrentModificationException.
Jaki jest wyjątek współbieżnej modyfikacji w przepełnieniu stosu Java?
Jeśli pojedynczy wątek generuje sekwencję wywołań metod, która narusza kontrakt obiektu, obiekt może zgłosić ten wyjątek. Na przykład, jeśli wątek modyfikuje kolekcję bezpośrednio podczas iteracji kolekcji z szybkim iteratorem, iterator zgłosi ten wyjątek.