Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Java ArrayBlockingQueue: Guia Avançado de Filas de Bloqueio e Operações Thread-Safe

Java ArrayBlockingQueue

Explore o Java ArrayBlockingQueue – aprenda como criar, manipular e usar thread-safely esta fila de bloqueio de tamanho fixo com exemplos claros.

A classe ArrayBlockingQueue no Java Collections Framework fornece uma fila limitada, thread-safe, apoiada por um array. Ela implementa a interface BlockingQueue, permitindo que produtores e consumidores coordenem via operações de bloqueio.

Criando um ArrayBlockingQueue

Importe java.util.concurrent.ArrayBlockingQueue e instancie com uma capacidade fixa:

ArrayBlockingQueue<Tipo> fila = new ArrayBlockingQueue<>(capacidade);

Onde Tipo é o tipo de elemento e capacidade é o tamanho máximo.

Nota: Capacidade é obrigatória; determina o tamanho limitado da fila.

Métodos Principais do ArrayBlockingQueue

A classe implementa todos os métodos de BlockingQueue para inserir, acessar e remover elementos. Abaixo estão as operações mais usadas.

Inserir Elementos

ArrayBlockingQueue<String> animais = new ArrayBlockingQueue<>(5);
animais.add("Cachorro");
animais.offer("Gato");
animais.offer("Cavalo");
System.out.println("ArrayBlockingQueue: " + animais);

Saída: ArrayBlockingQueue: [Cachorro, Gato, Cavalo]

Acessar Elementos

String cabeca = animais.peek();
System.out.println("Elemento da cabeça: " + cabeca);
Iterator<String> it = animais.iterator();
while (it.hasNext()) {
    System.out.print(it.next() + ", ");
}

Saída: Elemento da cabeça: Cachorro seguido da lista de elementos.

Remover Elementos

String removido1 = animais.remove();
String removido2 = animais.poll();
animais.clear();
System.out.println("Fila atualizada: " + animais);

Saída: Fila atualizada: []

Operações de Bloqueio: put() e take()

Esses métodos são essenciais para padrões produtor-consumidor. Eles bloqueiam até que a operação possa ser realizada, garantindo coordenação de threads.

put()

Insere um elemento, esperando se a fila estiver cheia. Pode lançar InterruptedException.

try {
    animais.put("Cachorro");
    animais.put("Gato");
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

take()

Remove e retorna o cabeça, esperando se a fila estiver vazia. Pode lançar InterruptedException.

try {
    String elemento = animais.take();
    System.out.println("Removido: " + elemento);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

Métodos de Conveniência Adicionais

MétodoDescrição
contains(Object o)Retorna true se a fila contém o elemento especificado.
size()Retorna o número atual de elementos.
toArray()Converte a fila para um array.
toString()Representação em string da fila.

Por Que Usar ArrayBlockingQueue?

Porque oferece:

Quando uma thread produz mais devagar que o consumidor, o consumidor bloqueia automaticamente, evitando busy-waiting e garantindo uso eficiente de CPU.

Java

  1. Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
  2. Comentários em Java: Tipos, Uso e Boas Práticas
  3. Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
  4. Dominando Strings em Java: Criação, Métodos e Boas Práticas
  5. Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
  6. Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
  7. Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
  8. Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
  9. Asserções em Java: Guia Prático para Detectar Bugs e Garantir Confiabilidade do Código
  10. Entendendo o Java Vector: Uso, Recursos e Comparação com ArrayList