Ich habe viele der SO Fragen zu diesem Thema gelesen, aber ich kann nicht verstehen, warum ich ein java.util.ConcurrentModificationException
mit binAndroid ConcurrentModificationException auf Set
In einer Klasse Ich habe dies:
private Set<RequestOrders> mRequests = new HashSet<>();
private final Object lock = new Object();
Alle Operationen
public void handleOrder(RequestOrders order) {
synchronized (lock) {
if (!mRequests.contains(order)) {
final sOrder = saveOrderOnDB(order);
mRequests.add(sOrder);
handleOrder(sOrder;
}
}
}
ich erhalte den Fehler in dieser: auf das mRequest
Objekt wird durch eine synchronisierte Anweisung wie folgt umgeben
void notifyOrder(int type) {
if (!mPause) {
synchronized (lock) {
for (RequestOrders request : mRequests) { // Error here while iterating
if (.....) {
redirectOrders(request);
} else if (....) {
......
startService(.....);
}
}
}
} else {
.....
}
}
Irgendeine Idee warum? Sollten die synchronisierten Anweisungen keine Nebenläufigkeitsprobleme verhindern?
Dank. Sollte ich besondere Sorgfalt darauf verwenden, 'mRequests.remove (order) zu entfernen;'? – Favolas
Ja, alle Änderungen am Set, die zur Änderung der Set-Größe führen, (entfernen oder hinzufügen), müssen auf ähnliche Weise behandelt werden. Viel Glück :) – sparkplug