Guava MultiMap und ConcurrentModificationException [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Über eine Sammlung iterieren, ConcurrentModificationException beim Entfernen von Objekten in einer Schleife vermeiden 23 answersWarum wird eine ConcurrentModificationException ausgelöst und wie man sie debuggt 6 answersIch verstehe nicht, warum ich eine ConcurrentModificationException erhalte, wenn ich durch dieses @ iteriermultimap
. Ich habe das folgende @ gelesEintra, aber ich bin mir nicht sicher, ob ich das Ganze verstanden habe. Ich habe versucht, einen synchronisierten Block hinzuzufügen. Aber ich bezweifle, mit was und wann ich synchronisieren soll.
Dasmultimap
ist ein Feld und wurde folgendermaßen erstellt:
private Multimap<GenericEvent, Command> eventMultiMap =
Multimaps.synchronizedMultimap(HashMultimap.<GenericEvent, Command> create());
und so verwendet:
eventMultiMap.put(event, command);
und so (Ich habe versucht, diesen Teil auf der Karte zu synchronisieren, aber ohne Erfolg)
for (Entry<GenericEvent, Command> entry : eventMultiMap.entries()) {
if (entry.getValue().equals(command)) {
eventMultiMap.remove(entry.getKey(), entry.getValue());
nbRemoved++;
}
}