我正在迭代一个对象数组,我不修改对象。 为什么会出现以下错误?
java.util.ConcurrentModificationException
代码:
ArrayList<Event> events=HistoryData.getEvents();
for (Event event: events) { <----- Getting the error here
HistoryDate eventDate = event.getEventDate();
if (eventDate.isGreaterEqualThen(searchDate)) {
ActualDate.setDate(event.getEventDate());
break;
}
}
更新
我有一个加载数组的线程,然后我在线程的末尾调用一个处理程序。那时,数组已经加载。 在这个处理程序中,我正在访问代码显示的数组。这个prerunning Thread是问题吗?
答案 0 :(得分:1)
另一个线程正在访问您的线程不安全列表,或者您正在尝试修改循环中的列表,以便在您想要使用下一个元素进行迭代时代码中断。如果它是另一个线程,那么您可以将列表类型更改为CopyOnWriteArrayList或通过添加同步语句来锁定列表,但是,不要更改其中的列表。循环。
synchronized (events) {
for (Event event: events) {
HistoryDate eventDate = event.getEventDate();
if (eventDate.isGreaterEqualThen(searchDate)) {
ActualDate.setDate(event.getEventDate());
break;
}
}
}