莫名其妙的错误:java.util.ConcurrentModificationException

时间:2017-02-24 07:05:32

标签: java android arrays

我正在迭代一个对象数组,我不修改对象。 为什么会出现以下错误?

  

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是问题吗?

1 个答案:

答案 0 :(得分:1)

另一个线程正在访问您的线程不安全列表,或者您正在尝试修改循环中的列表,以便在您想要使用下一个元素进行迭代时代码中断。如果它是另一个线程,那么您可以将列表类型更改为CopyOnWriteArrayList或通过添加同步语句来锁定列表,但是,不要更改其中的列表。循环。

synchronized (events) {
    for (Event event: events) {
        HistoryDate eventDate = event.getEventDate();

        if (eventDate.isGreaterEqualThen(searchDate)) {
            ActualDate.setDate(event.getEventDate());

            break;
        }
    }
}