陷入"java.util.ConcurrentModificationException"

art*_*rxe 6 java exception linked-list concurrentmodification

这是我的代码:

// eventList is a LinkedList

public void run() {

    Iterator<Event> it = eventList.iterator();
    int size = eventList.size();

    while(size > 0) {
        while(it.hasNext()) {
            Event e = it.next(); //flaged line

            if(e.ready()) {
                System.out.println(e);
                e.action();
                eventList.remove(e);
                --size;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

错误java.util.ConcurrentModificationException是在flag lined(Event e = it.next();)处抛出的.你是否在我的代码中看到一个错误,这个错误明显是抛出异常的原因?

Joa*_*uer 17

您在迭代eventList时使用eventList.remove()时正在修改.你不能这样做,否则Iterator变得无法使用.

只需更换eventList.remove(e),it.remove()它应该没问题.

此外,如果您的某个事件在第一次运行中没有准备就绪,您可以很容易地遇到无限循环,因为一旦返回it.hasNext()它将永远不会true返回false,但size也不会被修改.一个解决方案是整个移动Iterator it = ...线的第一while环.

我还修改外部while循环使用while (!e.isEmpty())而不是尝试跟踪eventList手动的大小.