ConcurrentModificationException:
Когда один поток выполняет итерацию объекта коллекции, а другой поток пытается изменить объект, итерация автоматически завершится ошибкой, и будет сгенерировано исключение concurrentModificationexception. Это связано с тем, что результат итерации не определен с ним.
Вот небольшой пример:
Основной метод пытается добавить целые числа в список.
В основном методе мы запускаем дочерний поток. то есть
т.старт()
В настоящее время у нас есть 2 потока в процессе.
Теперь основной поток пытается перебрать элементы списка, а в рамках этого процесса дочерний поток пытается добавить элемент 4 в список.
Таким образом, он дает ConcurrentModificationException.
Как избежать исключения ConcurrentModificationException?
1. Мы можем использовать параллельные коллекции, такие как concurrentHashmap и CopyonWriteArrayList, которые никогда не будут давать ConcurrentCollectionException.
2. Вместо итерации по классу коллекции мы можем выполнять итерацию по массиву, но это приведет к снижению производительности только в том случае, если размер массива слишком велик.
Примечание:
Не обязательно, чтобы это исключение было вызвано только тогда, когда другой поток пытается изменить объект коллекции. Это может произойти, если у одного потока есть тот или иной метод, который пытается нарушить контракт объекта.