Java ArrayBlockingQueue

Neste tutorial, aprenderemos sobre a classe ArrayBlockingQueue e seus métodos com a ajuda de exemplos.

A ArrayBlockingQueueclasse do framework Java Collections fornece a implementação da fila de bloqueio usando um array.

Ele implementa a interface Java BlockingQueue.

Criando ArrayBlockingQueue

Para criar uma fila de bloqueio de array, devemos importar o java.util.concurrent.ArrayBlockingQueuepacote.

Depois de importar o pacote, aqui está como podemos criar uma fila de bloqueio de array em Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Aqui,

  • Tipo - o tipo de fila de bloqueio de array
  • capacidade - o tamanho da fila de bloqueio de array

Por exemplo,

 // Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5); 

Nota: É obrigatório fornecer o tamanho do array.

Métodos de ArrayBlockingQueue

A ArrayBlockingQueueclasse fornece a implementação de todos os métodos da BlockingQueueinterface.

Esses métodos são usados ​​para inserir, acessar e excluir elementos de filas de bloqueio de array.

Além disso, aprenderemos sobre dois métodos put()e take()que suportam a operação de bloqueio na fila de bloqueio de array.

Esses dois métodos distinguem a fila de bloqueio de array de outras filas típicas.

Inserir Elementos

  • add()- Insere o elemento especificado na fila de bloqueio de array. Ele lança uma exceção se a fila estiver cheia.
  • offer()- Insere o elemento especificado na fila de bloqueio de array. Ele retorna falsese a fila estiver cheia.

Por exemplo,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("ArrayBlockingQueue: " + animals); ) ) 

Resultado

 ArrayBlockingQueue: (cachorro, gato, cavalo) 

Elementos de Acesso

  • peek()- Retorna um elemento da frente da fila de bloqueio de array. Ele retorna nullse a fila estiver vazia.
  • iterator()- Retorna um objeto iterador para acessar sequencialmente os elementos da fila de bloqueio de array. Ele lança uma exceção se a fila estiver vazia. Devemos importar o java.util.Iteratorpacote para usá-lo.

Por exemplo,

 import java.util.concurrent.ArrayBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("ArrayBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Resultado

 ArrayBlockingQueue: (Cachorro, Gato, Cavalo) Elemento acessado: Cachorro ArrayBlockingQueue Elementos: Cachorro, Gato, Cavalo, 

Remover Elementos

  • remove()- Retorna e remove um elemento especificado da fila de bloqueio de array. Ele lança uma exceção se a fila estiver vazia.
  • poll()- Retorna e remove um elemento especificado da fila de bloqueio de array. Ele retorna nullse a fila estiver vazia.
  • clear() - Remove todos os elementos da fila de bloqueio de array.

Por exemplo,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using remove() String element1 = animals.remove(); System.out.println("Removed Element:"); System.out.println("Using remove(): " + element1); // Using poll() String element2 = animals.poll(); System.out.println("Using poll(): " + element2); // Using clear() animals.clear(); System.out.println("Updated ArrayBlockingQueue: " + animals); ) ) 

Resultado

 ArrayBlockingQueue: (Dog, Cat, Horse) Elementos removidos: Usando remove (): Dog Using poll (): Cat Atualizado ArrayBlockingQueue: () 

Método put () e take ()

Em processos multithreading, podemos usar put()e take()para bloquear a operação de um thread para sincronizá-lo com outro thread. Esses métodos irão esperar até que possam ser executados com sucesso.

método put ()

Para adicionar um elemento ao final de uma fila de bloqueio de array, podemos usar o put()método.

Se a fila de bloqueio de array estiver cheia, ele espera até que haja espaço na fila de bloqueio de array para adicionar um elemento.

Por exemplo,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Resultado

 ArrayBlockingQueue: (cachorro, gato) 

Aqui, o put()método pode lançar um InterruptedExceptionse for interrompido durante a espera. Portanto, devemos colocá-lo dentro de um bloco try… catch.

Método take ()

Para retornar e remover um elemento da frente da fila de bloqueio de array, podemos usar o take()método.

Se a fila de bloqueio de array estiver vazia, ele espera até que haja elementos na fila de bloqueio de array para serem excluídos.

Por exemplo,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Resultado

 ArrayBlockingQueue: (Cachorro, Gato) Elemento Removido: Cachorro 

Aqui, o take()método lançará um InterrupedExceptionse for interrompido durante a espera. Portanto, devemos colocá-lo dentro de um try… catchbloco.

Outros métodos

Métodos Descrições
contains(element) Pesquisa a fila de bloqueio de array para o elemento especificado. Se o elemento for encontrado, ele retorna true, se não, ele retorna false.
size() Retorna o comprimento da fila de bloqueio da matriz.
toArray() Converte a fila de bloqueio de matriz em uma matriz e a retorna.
toString() Converte a fila de bloqueio de array em string

Por que usar ArrayBlockingQueue?

O ArrayBlockingQueueusa arrays como seu armazenamento interno.

É considerada uma coleção thread-safe . Por isso, é geralmente usado em aplicações multi-threading.

Suponha que um thread está inserindo elementos na fila e outro thread está removendo elementos da fila.

Agora, se o primeiro encadeamento for mais lento do que o segundo encadeamento, a fila de bloqueio de matriz pode fazer o segundo encadeamento esperar até que o primeiro encadeamento conclua suas operações.

Artigos interessantes...