ConcurrentModificationException utilizando iterador para eliminar entrada

superbadcodemonkey:

Tengo un simple trozo de código que los bucles a través de un mapa, cheques una condición para cada entrada, y ejecuta un método en la entrada si dicha condición es verdadera. Después de que la entrada se elimina del mapa. Para borrar una entrada del mapa de uso una Iteratorpara evitar ConcurrentModificationException's.

Excepto mi código hace una excepción, en la it.remove()línea de:

Caused by: java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.remove(Unknown Source) ~[?:1.8.0_161]
    at package.Class.method(Class.java:34) ~[Class.class:?]

Después de una larga búsqueda que no puedo encontrar una manera de solucionar este problema, todas las respuestas sugieren usar el Iterator.remove()método, pero yo ya lo estoy usando. La documentación para Map.entrySet()claramente especifica que es posible eliminar los elementos del conjunto utilizando el Iterator.remove()método.

Cualquier ayuda sería muy apreciada.

Mi código:

Iterator<Entry<K, V>> it = map.entrySet().iterator();
while (it.hasNext()) {
    Entry<K, V> en = it.next();

    if (en.getValue().shouldRun()) {
        EventQueue.invokeLater(()->updateSomeGui(en.getKey())); //the map is in no way modified in this method
        en.getValue().run();
        it.remove(); //line 34
    }
}
Rohit Dodle:

Por favor, use ConcurrentHashMap en lugar del HashMap como usted está actuando sobre el objeto en varios subprocesos. clase HashMap no es hilo de seguridad y también no permitir dicha operación. Por favor, consulte a continuación enlace para obtener más información relacionada con este.

https://www.google.co.in/amp/s/www.geeksforgeeks.org/difference-hashmap-concurrenthashmap/amp/

Avisadme para más información.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=207991&siteId=1
Recomendado
Clasificación