O que é BlockingQueue Thread-Safe em Java? Quando você deve usá-lo? Implementação anexada

Publicados: 2021-04-30
O que é Threadsafe BlockingQueue em Java e quando você deve usá-lo

Até agora escrevi dois artigos sobre o conceito Produtor Consumidor no Crunchify. 1º para explicar Java Semaphore e Mutex e 2º para explicar Leitura/Gravação Concorrente.

Neste Tutorial de Java, abordaremos o mesmo conceito de Produtor/Consumidor para explicar o BlockingQueue in Java .

Quais são as vantagens do Blocking Queue em Java?

Um java.util.Queue suporta operações que aguardam que a fila se torne não vazia ao recuperar um elemento e aguardam que o espaço fique disponível na fila ao armazenar um elemento.

java.util.BlockingQueue em java - Crunchify

Precisamos criar quatro classes Java:

  1. CrunchifyMessage.java para colocar e receber mensagem
  2. CrunchifyBlockingProducer.java para colocar a mensagem na fila
  3. CrunchifyBlockingConsumer.java para obter a mensagem da fila
  4. CrunchifyBlockingMain.java para iniciar o teste

As implementações BlockingQueue são thread-safe . Todos os métodos de enfileiramento são de natureza atômica e usam travas internas.

Vamos começar na implementação do Thread-Safe BlockingQueue em Java

Passo 1

Crie a classe CrunchifyMessage.java . Este é um objeto Java simples.

Passo 2

Crie o produtor CrunchifyBlockingProducer.java que criou uma mensagem simples e a colocou na fila.

Etapa 3

Crie a classe CrunchifyBlockingConsumer.java que consome a mensagem da fila.

Passo 4

Crie o método CrunchifyBlockingMain.java simples que executa o teste BlockingQueue. Execute este programa para verificar o comportamento do BlockingQueue.

Um BlockingQueue não aceita elementos nulos . Implementações lançam NullPointerException nas tentativas de adicionar , colocar ou oferecer um valor nulo .

Um valor nulo é usado como um valor sentinela para indicar falha nas operações de sondagem .

Resultado:

Quando devemos usar java.util.concurrent.BlockingQueue?

  • Quando você deseja limitar algum tipo de solicitação recebida, deve usar o mesmo
  • Um produtor pode ficar muito à frente dos consumidores com uma fila ilimitada. Se o consumidor não estiver alcançando o produtor, isso pode causar um OutOfMemoryError . Em situações como essas, pode ser melhor sinalizar a um possível produtor que a fila está cheia e desistir rapidamente com uma falha.
    • Em outras palavras: os produtores são naturalmente estrangulados.
  • A Fila de Bloqueio é normalmente usada em aplicativos simultâneos
  • Ele fornece uma implementação correta e thread-safe
  • O consumo de memória também deve ser limitado