HashMap pode ser sincronizado em Java?

HashMap é uma estrutura de dados muito poderosa em Java e nós a usamos todos os dias e em quase todos os aplicativos.

Como devem saber HashMap é uma classe de coleção não sincronizada, caso não saibam, a novidade é saber que SIM, HashMap pode ser sincronizado.

Neste tutorial, vamos tentar entender “Por Quê” e “Como” podemos sincronizar o Hashmap!

Por quê?

O Map é uma estrutura de dados que armazena elementos, formado por uma combinação de uma chave de identificação exclusiva e um valor atribuído mapeado. Se você tiver uma aplicação altamente concorrente no qual deseja modificar ou ler o valor da chave em diferentes threads, digo-te logo que o ideal usar a implementação ConcurrentHashMap. O melhor exemplo é o Producer/Consumer, que faz com leitura/gravação concorrente.

Então, o que significa o Map ser thread-safe?

Significa que se vários encadeamentos acessam um HashMap em concorrência e pelo menos um dos encadeamentos modifica o Map estruturalmente, ele deve ser sincronizado externamente para evitar uma visualização inconsistente do conteúdo. Tão isso quanto isso.

Como?

Vamos lá! Existem duas maneiras de sincronizar o HashMap:
  1. Usar ConcurrentHashMap (Que já aprendemos a utilizar no post anterior)
  2. Java Collections – método synchronizedMap()
//synchronizedMap
Map<String, String> synchronizedHashMap = Collections.synchronizedMap(new HashMap<String, String>());

SynchronizedHashMap

  • Sincronização a nível do objeto.
  • Cada operação de leitura/gravação precisa adquirir lock.
  • Fazer lock a coleção inteira é uma sobrecarga de desempenho.
  • Essencialmente dá acesso a apenas uma thread para todo o Map e bloqueia todos as outras threads.
  • Pode causar contenção.
  • SynchronizedHashMap retorna um Iterator, que falha rapidamente se utilizado em concorrêcia.

No próximo post pretendo então exemplificar, explicar e fazer um benchmark entre SynchronizedHashMap e ConcurrentHashMap.

Obrigado e até lá. 🙂

Leave a comment

Comments (

2

)

  1. Jaderson

    Muito bom !

    Liked by 1 person

  2. SynchronizedMap x ConcurrentHashMap – micro benchmark – IVAN MARRÊTA

    […] conversamos sobre SynchronizedMap e ConcurrentHashMap, os resultados obtidos refletem a forma de acesso aos objetos […]

    Liked by 1 person

Create a website or blog at WordPress.com