Java · Intermediário · Inglês · Técnico
ConcurrentHashMap
Mapa thread-safe e de alto desempenho, com leituras sem bloqueio, escritas em partes separadas e operações atômicas como computeIfAbsent e merge.
Onde usar
Aparece em caches e contadores compartilhados entre threads. Em review: 'HashMap num singleton é bug de concorrência'.
Em código
ConcurrentMap<String, Integer> m =
new ConcurrentHashMap<>();
m.merge("acessos", 1, Integer::sum);
m.computeIfAbsent("x", k -> 0);
// m.put(null, 1) lança NPEExemplos
Swap the HashMap for a ConcurrentHashMap in the cache.
Troque o HashMap por um ConcurrentHashMap no cache.
Use merge instead of get followed by put.
Use merge em vez de get seguido de put.
Cuidado
Não aceita chave nem valor null, e operações compostas fora dos métodos atômicos (get e depois put) continuam com race condition.