ConcurrentModificationException 尝试在列表中删除所有内容时(不迭代)
ConcurrentModificationException when attempting to removeAll on a list (not iterating)
这里有些奇怪的行为,因为我没有遍历列表。
public boolean deleteEvents(ArrayList<EventsModel> list) {
boolean success = false;
synchronized (lock) {
ArrayList<EventsModel> listClone = (ArrayList<EventsModel>) list.clone();
success = processDelete(listClone);
}
return success;
}
private boolean processDelete(List<EventsModel> list) {
boolean success = false;
if (list.size() > 999) {
List<EventsModel> subList = list.subList(0, 998);
list.removeAll(subList); // blows up with ConcurrentModificationException
//
} else {
//
}
return success;
}
我没有正确使用 removeAll
吗?
您将 subList() 与 removeAll 结合使用是导致此异常的原因。您可以阅读 subList 的 javadoc 以了解更多信息。
这里有些奇怪的行为,因为我没有遍历列表。
public boolean deleteEvents(ArrayList<EventsModel> list) {
boolean success = false;
synchronized (lock) {
ArrayList<EventsModel> listClone = (ArrayList<EventsModel>) list.clone();
success = processDelete(listClone);
}
return success;
}
private boolean processDelete(List<EventsModel> list) {
boolean success = false;
if (list.size() > 999) {
List<EventsModel> subList = list.subList(0, 998);
list.removeAll(subList); // blows up with ConcurrentModificationException
//
} else {
//
}
return success;
}
我没有正确使用 removeAll
吗?
您将 subList() 与 removeAll 结合使用是导致此异常的原因。您可以阅读 subList 的 javadoc 以了解更多信息。