java exception linked-list concurrentmodification

Atascado con "java.util.ConcurrentModificationException"



linked-list (2)

Aquí está mi código:

// 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; } } } }

El error java.util.ConcurrentModificationException se arroja a la bandera alineada ( Event e = it.next(); ). ¿Ve un error en mi código que hace obvio el motivo de esa excepción?


Debe eliminar el elemento a través del iterador, de lo contrario, el iterador se restablece porque la colección subyacente cambió.


Está modificando eventList mientras usa eventList.remove() mientras itera sobre él. No debe hacer esto, o el Iterator queda inutilizable.

Simplemente reemplace eventList.remove(e) con it.remove() y debería estar bien.

Además, puede ejecutar fácilmente un bucle sin fin si uno de sus eventos no está listo en la primera ejecución porque it.hasNext() nunca volverá a ser true una vez que haya resultado false , pero el size tampoco se modificará. Una solución sería mover todo el Iterator it = ... línea dentro del primer ciclo while.

También modificaría el bucle while externo para usar while (!e.isEmpty()) lugar de intentar seguir el tamaño de eventList manualmente.