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