0
我讀過很多關於這個問題的SO問題,但我不明白爲什麼我有一個java.util.ConcurrentModificationException
的Android ConcurrentModificationException的上設置
在一類我有這樣的:
private Set<RequestOrders> mRequests = new HashSet<>();
private final Object lock = new Object();
所有操作在mRequest
對象通過synchronized聲明這樣的包圍:
public void handleOrder(RequestOrders order) {
synchronized (lock) {
if (!mRequests.contains(order)) {
final sOrder = saveOrderOnDB(order);
mRequests.add(sOrder);
handleOrder(sOrder;
}
}
}
我得到的錯誤是:
void notifyOrder(int type) {
if (!mPause) {
synchronized (lock) {
for (RequestOrders request : mRequests) { // Error here while iterating
if (.....) {
redirectOrders(request);
} else if (....) {
......
startService(.....);
}
}
}
} else {
.....
}
}
任何想法爲什麼?同步語句不應該阻止併發問題嗎?
感謝。我是否應該特別注意刪除'mRequests.remove(order);'? – Favolas
是的,對Set的任何修改將導致Set size改變,(remove或add)將需要以類似的方式處理。祝你好運 :) – sparkplug