ConcurrentModificationException:

Когда один поток выполняет итерацию объекта коллекции, а другой поток пытается изменить объект, итерация автоматически завершится ошибкой, и будет сгенерировано исключение concurrentModificationexception. Это связано с тем, что результат итерации не определен с ним.

Вот небольшой пример:

Основной метод пытается добавить целые числа в список.

В основном методе мы запускаем дочерний поток. то есть

т.старт()

В настоящее время у нас есть 2 потока в процессе.

Теперь основной поток пытается перебрать элементы списка, а в рамках этого процесса дочерний поток пытается добавить элемент 4 в список.

Таким образом, он дает ConcurrentModificationException.

Как избежать исключения ConcurrentModificationException?

1. Мы можем использовать параллельные коллекции, такие как concurrentHashmap и CopyonWriteArrayList, которые никогда не будут давать ConcurrentCollectionException.

2. Вместо итерации по классу коллекции мы можем выполнять итерацию по массиву, но это приведет к снижению производительности только в том случае, если размер массива слишком велик.

Примечание:

Не обязательно, чтобы это исключение было вызвано только тогда, когда другой поток пытается изменить объект коллекции. Это может произойти, если у одного потока есть тот или иной метод, который пытается нарушить контракт объекта.