No se puede subestimar la importancia de sincronizar o usar ConcurrentHashMap.
Hasta hace un par de años tenía la impresión errónea de que podía salirse con la suya solo sincronizando las operaciones de poner y quitar en un HashMap. Esto es, por supuesto, muy peligroso y, en realidad, da como resultado un ciclo infinito en HashMap.get() en algunos jdk (creo que a principios de los 1.5).
Lo que hice hace un par de años (y realmente no debe hacerse):
public MyCache {
private Map<String,Object> map = new HashMap<String,Object>();
public synchronzied put(String key, Object value){
map.put(key,value);
}
public Object get(String key){
// can cause in an infinite loop in some JDKs!!
return map.get(key);
}
}
EDITAR: que me gustaría añadir un ejemplo de lo que nohacer (véase más arriba)
¿Las actualizaciones incluyen las eliminaciones? ¿Sus accesos incluyen iterar sin embargo? –
No importa, creo que esas preguntas son irrelevantes. –
¿O son ellos? [Necesito más sueño] –