Fondo rápido Tengo un mapa simultáneo Utilicé para almacenar en caché algunos valores que cambian con bastante frecuencia (aún vale la pena almacenarlas en caché). Deseo expulsar elementos de mi caché a intervalos regulares examinando un tiempo de caducidad en el valor. Estoy utilizando el método keySet() para obtener una referencia a todas mis claves y luego verifico los valores y si caduco, los elimino. En otros hilos, la caché se consulta y actualiza (elimina) constantemente.Pregunta de Java ConcurentMap keySet() cuando se modifica el mapa y se itera sobre el conjunto de claves
De los javadocs para keySet() mencionó si el mapa cambia mientras estoy iterando sobre el conjunto de claves Establecer los resultados no están definidos. Obviamente, me gustaría una forma definida de tratar con esto para que los resultados sean válidos. ¿Sería suficiente pasar el Set a un HashSet y luego iterar sobre este conjunto ya que entiendo que este conjunto no estará respaldado por el mapa? ¿Es esto un desperdicio de memoria? Cualquier idea apreciada.
Desafortunadamente, mi desalojador no es la única forma de eliminar elementos del mapa simultáneo, así que estoy en lo cierto al decir que necesito copiar el conjunto de claves a otro conjunto antes de recorrerlo.
Gracias de antemano
EDIT: Resulta que yo estaba leyendo los javadocs para el método en lugar del conjunto de claves ConcurrentMap() Mapa de conjunto de claves(). Gracias mi mal :)
Devuelve una vista de conjunto de las claves que figuran en este mapa. El conjunto es respaldado por el mapa, por lo que los cambios en el mapa se reflejan en el conjunto y viceversa. Si el mapa se modifica mientras que una iteración sobre el conjunto está en progreso (excepto a través propia operación de eliminación del del iterador), los resultados de la iteración son indefinido. El conjunto admite la eliminación del elemento , que elimina la asignación correspondiente del mapa, a través de Iterator.remove, Set.remove, removeAll retainAll y borra las operaciones . No es compatible con agregar o agregar todas las operaciones.
Gran Gracias Brian vosotros soy usando un hashmap concurrente pero al mirar los javadocs estaba leyendo los documentos del mapa :) Gracias un millón –