ConcurrentModificationException java aparece en las causas, soluciones y otros

Java Development veces ConcurrentModificationException, la anomalía se debe a la Colección de recorrido hizo una deleción o adición de operaciones, esta vez el tamaño de las estadísticas originales y el nuevo tamaño no es uniforme, lo que resulta en la excepción. La siguiente es una explicación en StackOverflow:
[cita]

Aquí apos qué: de como está (imagen) en el Javadoc:
de Los iteradores devueltos por los apos esta clase de iterador y Métodos ListIterator se fail-fast: Si la lista está estructuralmente modificado en el cualquier momento después del iterador se crea , en modo alguno, sino por el iterador la propia quitar o añadir métodos, el iterador arrojará un ConcurrentModificationException.

Esta comprobación se realiza en el método next () del iterador (como se puede ver por la StackTrace). Pero vamos a llegar al método next () sólo si hasNext () entregó verdadera, que es lo que se llama por el para cada comprobar si se cumple el límite. En el método remove, cuando hasNext () comprueba si tiene que volver otro elemento, se verá que regresó dos elementos, y ahora después de un elemento se retiró la lista sólo contiene dos elementos. Así que todo es color de rosa y hemos terminado con la iteración. La comprobación de modificaciones simultáneas no se produce, ya que esto se hace en el método next (), que nunca se llama.

A continuación llegamos al segundo bucle. Después quitamos el segundo número el método hasNext comprobará de nuevo si puede volver más valores. Ha vuelto ya dos valores, pero la lista ahora sólo contiene una. Pero el código aquí es:

pública de Boole la hasNext () {
retorno del cursor = size () ;!
}

!. 1 = 2, así que continúe con la siguiente () método, que ahora se da cuenta de que de que alguien ha estado jugando con la lista y los incendios en la excepción.

La esperanza de que borra su cuestionan hacia arriba. [/ quote]

para solucionar este problema, hay muchos artículos en línea. La mayor parte se habla de atravesar la colección en un hilo, mientras que la operación de eliminación, se recomienda utilizar el método (), su método remove (Obj) en lugar de iterador # elimina. Pero si es el caso de multi-hilo, incluso si un hilo se utiliza en el método iterador # remove () ha cambiado una colección, mientras que otro hilo está atravesando la colección, o va a tener el mismo problema.
Así que la solución es la necesidad de utilizar dos hilos a los centros de recogida que están bloqueados, puede bloquear la colección, o la clase colección contiene bloqueado.

Y para resolver el caso mientras atraviesa el aumento de la lista se puede cambiar CopyOnWriteArrayList, mapa sustituida por la versión síncrona correspondiente puede ConcurrentHashMap.
Publicado 56 artículos originales · ganado elogios 0 · Vistas 7774

Supongo que te gusta

Origin blog.csdn.net/chainhou/article/details/84472200
Recomendado
Clasificación