Guava MultiMap and ConcurrentModificationException [duplikat]
To pytanie ma już odpowiedź tutaj:
Iterowanie przez kolekcję, unikając ConcurrentModificationException podczas usuwania obiektów w pętli 23 odpowiedziDlaczego zgłoszony został wyjątek ConcurrentModificationException i jak go debugować 6 odpowiedzi Nie rozumiem, dlaczego otrzymuję wyjątek ConcurrentModificationException podczas iteracji przez tomultimap
. Przeczytałem następującewejści, ale nie jestem pewien, czy wszystko zrozumiałem. Próbowałem dodać zsynchronizowany blok. Ale mam wątpliwości, z czym i kiedy synchronizować.
Themultimap
jest polem utworzonym w ten sposób:
private Multimap<GenericEvent, Command> eventMultiMap =
Multimaps.synchronizedMultimap(HashMultimap.<GenericEvent, Command> create());
i używane w ten sposób:
eventMultiMap.put(event, command);
i tak (próbowałem zsynchronizować tę część na mapie, ale bezskutecznie)
for (Entry<GenericEvent, Command> entry : eventMultiMap.entries()) {
if (entry.getValue().equals(command)) {
eventMultiMap.remove(entry.getKey(), entry.getValue());
nbRemoved++;
}
}