Hashtables se sincronizan pero son una vieja aplicación que casi se podría decir está en desuso. Además, no permiten claves nulas (¿quizás tampoco valores nulos? No estoy seguro).
Un problema es que aunque todas las llamadas a métodos están sincronizadas, la mayoría de las acciones interesantes requieren más de una llamada, por lo que debe sincronizar las diferentes llamadas.
Un nivel similar de sincronización puede ser obtenida para HashMaps llamando:
Map m = Collections.synchronizedMap(new HashMap());
que envuelve un mapa en llamadas a métodos sincronizados. Pero esto tiene los mismos inconvenientes de concurrencia que Hashtable.
Como dice Pablo, ConcurrentHashMaps proporcionar mapas de seguridad de rosca con métodos útiles adicionales para actualizaciones atómicas.
El problema surgirá solo si tenemos variables de instancia correctas? Con las variables que se declaran y usan dentro de la firma del método, no habrá problemas en el entorno multiproceso. Por favor, corrige si está mal. –
Pueden surgir problemas * más rápido * con variables de instancia, pero ese no es el problema. El problema es compartir variables sin ningún tipo de * control *. Utilizo un ConcurrentHashMap estático sin problemas (estoy absolutamente de acuerdo con la respuesta de Paul) :) – ATorras
¿Cómo compartirá la variable que no es de instancia ??????? –