ConcurrentModificationException:

Feb 09 2023
Główną metodą jest próba dodania liczb całkowitych do listy. W metodzie main uruchamiamy wątek potomny.

Główną metodą jest próba dodania liczb całkowitych do listy.

W metodzie main uruchamiamy wątek potomny. tj

t.start()

Obecnie mamy 2 wątki w procesie.

Teraz główny wątek próbuje iterować elementy listy, aw ramach tego procesu wątek potomny próbuje dodać element 4 do listy.

W ten sposób daje wyjątek ConcurrentModificationException.

Jak uniknąć wyjątku ConcurrentModificationException?

1. Możemy korzystać z współbieżnych kolekcji, takich jak concurrentHashmap i CopyonWriteArrayList, które nigdy nie zwrócą wyjątku ConcurrentCollectionException.

2. Zamiast iteracji po klasie kolekcji możemy iterować po Array , ale zmniejszy to wydajność tylko wtedy, gdy rozmiar tablicy jest zbyt duży.

Notatka:

Nie jest obowiązkowe, aby ten wyjątek był zgłaszany tylko wtedy, gdy inny wątek próbuje zmodyfikować obiekt kolekcji. Może się tak zdarzyć, jeśli pojedynczy wątek ma jakąś lub inną metodę, która próbuje naruszyć kontrakt obiektu.