Como implementar melhor o mapa de hash simultâneo em Java?



Este artigo apresentará a você um conceito chamado Concurrent Hash Map em Java e o acompanhará com uma demonstração prática

Este artigo irá apresentá-lo a um conceito chamado como Concurrent Hash Map In e acompanhe-o com uma demonstração prática. As seguintes dicas serão abordadas neste artigo,

Continuando com este artigo sobre Mapa de hash simultâneo em Java





Como o ConcurrentHashMap funciona internamente?

Do Java 5 em diante, o ConcurrentHashMap é apresentado como uma alternativa para o HashTable. Também podemos obter um mapa sincronizado usando o método de classe de utilitário chamado synchronizedMap (), mas há uma desvantagem desse método, ou seja, um desempenho muito baixo, pois apenas um único thread pode acessá-lo por vez. Portanto, ConcurrentHashMap resolve esses problemas.



Continuando com este artigo sobre Mapa de hash simultâneo em Java

Por que outro mapa?

Mesmo que já tenhamos HashMap, HashTable, então o que é necessário do ConcurrentHashMap, é porque ele fornece melhor desempenho ao mesmo tempo em que é seguro para threads.

Continuando com este artigo sobre Mapa de hash simultâneo em Java



como converter um double para um int em java

Como é diferente?

Ele também é baseado em hashing, mas seu desempenho é aprimorado por sua estratégia de bloqueio. Ao contrário do HashTable ou do HashMap sincronizado, ele não aplica o mesmo bloqueio em cada método, ele usa um bloqueio separado para cada método. Ele usa o bloqueio reentrante para essa finalidade. Semelhante ao HashMap, ConcurrentHashMap tem 16 depósitos, ou seja, segmentos, para criar ConcurrentHashMap com mais de 16 depósitos, ele possui construtores diferentes.

Antes de falar em detalhes, vamos revisar alguns conceitos abaixo:

ConcurrentHashMap: Este mapa permite o acesso de thread simultâneo. Apenas parte do mapa, chamada de segmento, ou seja, a estrutura de dados subjacente, fica bloqueada ao adicionar ou atualizar o mapa. Ele permite o acesso de thread simultâneo para ler os dados sem bloqueio. Ele foi introduzido para melhorar o desempenho.

  • Nível de simultaneidade: é um número estimado de threads de atualização simultânea.
  • Load-Factor: é um valor que é usado para controlar o fator de redimensionamento.
  • Capacidade Inicial: É uma propriedade que cria um Mapa com o tamanho fornecido.

Vamos ver o diagrama abaixo e tentar entender como funciona o ConcurrentHashMap.

Imagem- Hashmap simultâneo- Edureka

Portanto, no diagrama acima, temos 16 bloqueios que bloqueiam apenas uma parte do mapa que é necessária para que outros métodos possam ser acessados ​​por diferentes threads, melhorando assim o desempenho.

Semelhante ao HashMap, o ConcurrentHashMap funciona de maneira semelhante, contém 16 segmentos por padrão e armazena o elemento por hash, portanto, se os elementos tiverem o mesmo hash, eles serão armazenados no mesmo segmento conforme mostrado no diagrama acima com a ajuda da lista vinculada.

Continuando com este artigo sobre Mapa de hash simultâneo em Java

Diferença entre ConcurrentHashMap e HashMap

HashMap pertence às coleções, enquanto ConcurrentHashMap pertence às coleções simultâneas, no entanto, existem muitas outras diferenças entre eles.

o que um desenvolvedor de tableau faz
  • ConcurrentHashMap éThread-safe, ou seja,sincronizado, mas o HashMap não está sincronizado.
  • ConcurrentHashMap tem baixo desempenho porque é sincronizado porque às vezes os threads precisam esperar, mas o HashMap tem alto desempenho porque não está sincronizado e qualquer thread pode acessá-lo simultaneamente.
  • Obteremos ConcurrentModificationException se duas threads estiverem tentando simultaneamente modificar ou adicionar conteúdo de Object. No entanto, no caso de ConcurrentHashMap, não obteremos nenhuma exceção ao realizar a mesma operação.

  • Valores nulos são permitidos para chave e valores no HashMap, no entanto, ConcurrentHashMap não permite valores nulos para a chave e o valor que tentou adicionar um valor nulo, obteremos uma exceção, por exemplo, NullPointerException.

  • O HashMap é introduzido no JDK 1.2, enquanto o ConcurrentHashMap é introduzido no JDK 1.5.

Como vimos anteriormente para melhor desempenho, consiste em uma matriz de nós como baldes de tabela que eram segmentos de tabela antes de Java 8 .

Os depósitos são inicializados lentamente quando a primeira inserção é realizada. Cada depósito pode ser bloqueado de forma independente, bloqueando o primeiro nó do depósito e as operações de leitura não bloqueiam.

Comparado com HashMap, ConcurrentHashMap fornece o extra concurrencyLevel argumento para controlar o número de threads estimados a serem usados.

Construtores:

  1. ConcurrentHashMap m = novo ConcurrentHashMap ()

    Um novo mapa vazio é criado com uma capacidade inicial padrão de 16, fator de carga de 0,75 e nível de simultaneidade 16.

  2. ConcurrentHashMap m = novo ConcurrentHashMap (int initialCapacity)
    Um novo mapa vazio é criado com uma capacidade inicial especificada, fator de carga de 0,75 e nível de simultaneidade 16.

  3. ConcurrentHashMap m = novo ConcurrentHashMap (int initialCapacity, float loadFactor)

    Um novo mapa vazio é criado com uma capacidade inicial especificada e fator de carga com nível de simultaneidade 16.

  4. ConcurrentHashMap m = novo ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
    Um novo mapa vazio é criado com uma capacidade inicial especificada, fator de carga e nível de simultaneidade.

  5. ConcurrentHashMap m = novo ConcurrentHashMap (Mapa m)
    Cria um novo ConcurrentHashMap a partir do mapa fornecido.

Os outros dois argumentos: initialCapacity e loadFactor funcionavam da mesma forma que HashMap.
ConcurrentMap é consistente com a memória em operações de chave / valor em um ambiente multiencadeado.

Continuando com este artigo sobre Mapa de hash simultâneo em Java

Armadilhas

Ao recuperar objetos, o ConcurrentHashMap não é bloqueado e pode se sobrepor às operações de atualização, portanto, para melhor desempenho, eles recuperam apenas as operações de atualização concluídas mais recentemente.

Os resultados dos métodos de status agregado incluindo size, isEmpty e containsValue são normalmente úteis apenas quando um mapa não está passando por atualizações simultâneas em outros encadeamentos.

Se as atualizações simultâneas forem controladas adequadamente, esses métodos de status podem ser confiáveis.

Embora esses métodos não garantam em tempo real.

A capacidade padrão da tabela é 16, mas podemos alterá-la usando o nível de simultaneidade.

public ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel) {// ... if (initialCapacity

Se as chaves precisam estar em ordem de classificação, podemos usar ConcurrentSkipListMap.

Agora, depois de executar o programa acima, você terá entendido o Mapa Hash Concorrente em Java. Assim, chegamos ao fim deste artigo em Se você deseja saber mais, consulte o , uma empresa confiável de aprendizagem online. O curso de certificação e treinamento em Java J2EE e SOA da Edureka foi projetado para treiná-lo tanto para conceitos básicos quanto avançados de Java, juntamente com várias estruturas Java como Hibernate e Spring.

o que é um namespace c ++

Tem alguma questão para nós? Mencione isso na seção de comentários deste artigo e entraremos em contato com você o mais breve possível.