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;
            }
        }
    }
}
错误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手动的大小.