В этом случае строка
mapIterator.next ()
броски ConcurrentModificationException
.
Причина этого:
Существует переменная int
modCount
, которая показывает, сколько раз размер списка был изменен, это значение используется при каждом вызове next()
для проверки любых изменений в функции checkForComodification()
.
если mapIterator.next()
обнаружит изменение в modCount
во время итерации объекта, то будет выдано ConcurrentModificationException
.
Чтобы избежать этого, следуйте приведенным ниже пунктам:
Вы можете преобразовать список в массив, а затем выполнить итерацию по массиву. Этот подход хорошо работает для небольшого или среднего списка, но если список большой, это сильно повлияет на производительность.
Вы можете заблокировать список во время итерации, поместив его в синхронизированный блок. Этот подход не рекомендуется, потому что он прекратит преимущества многопоточности.
Если вы используете JDK1.5 или выше, вы можете использовать классы ConcurrentHashMap и CopyOnWriteArrayList. Это рекомендуемый подход.