¿Qué es cierto sobre HashMap, Hashtable y ConcurrentHashMap?
Opciones
- Los tres son igual de seguros y rápidos con muchos threads
HashMapno es seguro;Hashtablebloquea todo;ConcurrentHashMapbloquea menos (Opción correcta)HashMapes el único que admite claves null, y es thread-safeConcurrentHashMapsiempre es más lento queHashtable
Respuesta
HashMap no es thread-safe; Hashtable bloquea todo el map (antiguo, lento); ConcurrentHashMap admite muchos threads con locks de grano fino
Por qué
HashMap es rápido pero inseguro si varios threads lo modifican a la vez (actualizaciones perdidas, incluso bucles infinitos en versiones antiguas).
Hashtable está sincronizado en cada método, así que solo un thread trabaja a la vez. Es legacy; evítalo.
ConcurrentHashMap está pensado para concurrencia: las lecturas no bloquean y las escrituras bloquean solo partes pequeñas. También ofrece operaciones atómicas como computeIfAbsent y merge. No admite claves ni valores null.
Recuerda
Map compartido entre threads: ConcurrentHashMap.