そもそもなぜこのメソッドで例外が発生するのか、なぜこの場所で例外が発生するのかよくわかりません。(そこでは変更は行われません)
Iterator<EventGroup> groupIterator = eventGroups.iterator();
while (groupIterator.hasNext()) {
EventGroup eventGroup = groupIterator.next();
Iterator<ScheduledEvent> eventIterator = eventGroup.getEvents().iterator();
while (eventIterator.hasNext()) {
ScheduledEvent event = eventIterator.next(); // <------------- ConcurrentModificationException
boolean found = ((SomeObject) event).getSomeId() == someId;
if (found) {
unschedule++;
unscheduleEvent(event);
eventGroup.remove(event);
if (eventGroup.isEmpty()) {
eventGroups.remove(eventGroup);
}
}
}
}
ここで変更されているのは、だけのようですがeventGroup
、イテレータを使用してその上を歩きます。
ここで何が起こっているのか理解するのを手伝ってください。