Java ArrayBlockingQueue

En este tutorial, aprenderemos sobre la clase ArrayBlockingQueue y sus métodos con la ayuda de ejemplos.

La ArrayBlockingQueueclase del marco de las colecciones de Java proporciona la implementación de la cola de bloqueo mediante una matriz.

Implementa la interfaz Java BlockingQueue.

Creando ArrayBlockingQueue

Para crear una cola de bloqueo de matrices, debemos importar el java.util.concurrent.ArrayBlockingQueuepaquete.

Una vez que importamos el paquete, así es como podemos crear una cola de bloqueo de matriz en Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Aquí,

  • Tipo: el tipo de cola de bloqueo de la matriz
  • capacidad: el tamaño de la cola de bloqueo de la matriz

Por ejemplo,

 // 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: es obligatorio proporcionar el tamaño de la matriz.

Métodos de ArrayBlockingQueue

La ArrayBlockingQueueclase proporciona la implementación de todos los métodos en la BlockingQueueinterfaz.

Estos métodos se utilizan para insertar, acceder y eliminar elementos de las colas de bloqueo de matrices.

Además, aprenderemos sobre dos métodos put()y take()que admiten la operación de bloqueo en la cola de bloqueo de matrices.

Estos dos métodos distinguen la cola de bloqueo de matrices de otras colas típicas.

Insertar elementos

  • add()- Inserta el elemento especificado en la cola de bloqueo de la matriz. Lanza una excepción si la cola está llena.
  • offer()- Inserta el elemento especificado en la cola de bloqueo de la matriz. Vuelve falsesi la cola está llena.

Por ejemplo,

 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); ) ) 

Salida

 ArrayBlockingQueue: (perro, gato, caballo) 

Elementos de acceso

  • peek()- Devuelve un elemento del frente de la cola de bloqueo de matrices. Vuelve nullsi la cola está vacía.
  • iterator()- Devuelve un objeto iterador para acceder secuencialmente a elementos de la cola de bloqueo de matrices. Lanza una excepción si la cola está vacía. Debemos importar el java.util.Iteratorpaquete para usarlo.

Por ejemplo,

 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(", "); ) ) ) 

Salida

 ArrayBlockingQueue: (perro, gato, caballo) Elemento accedido: perro ArrayBlockingQueue Elementos: perro, gato, caballo, 

Eliminar elementos

  • remove()- Devuelve y elimina un elemento especificado de la cola de bloqueo de matrices. Lanza una excepción si la cola está vacía.
  • poll()- Devuelve y elimina un elemento especificado de la cola de bloqueo de matrices. Vuelve nullsi la cola está vacía.
  • clear() - Elimina todos los elementos de la cola de bloqueo de matrices.

Por ejemplo,

 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); ) ) 

Salida

 ArrayBlockingQueue: (Perro, Gato, Caballo) Elementos eliminados: Usando remove (): Perro Usando poll (): Gato Actualizado ArrayBlockingQueue: () 

Método put () y take ()

En procesos de subprocesos múltiples, podemos usar put()y take()para bloquear el funcionamiento de un subproceso para sincronizarlo con otro subproceso. Estos métodos esperarán hasta que se puedan ejecutar correctamente.

método put ()

Para agregar un elemento al final de una cola de bloqueo de matriz, podemos usar el put()método.

Si la cola de bloqueo de matrices está llena, espera hasta que haya espacio en la cola de bloqueo de matrices para agregar un elemento.

Por ejemplo,

 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); ) ) ) 

Salida

 ArrayBlockingQueue: (Perro, Gato) 

Aquí, el put()método puede lanzar un InterruptedExceptionsi se interrumpe mientras espera. Por lo tanto, debemos encerrarlo dentro de un bloque try… catch.

método take ()

Para devolver y eliminar un elemento del frente de la cola de bloqueo de matrices, podemos usar el take()método.

Si la cola de bloqueo de la matriz está vacía, espera hasta que haya elementos en la cola de bloqueo de la matriz para eliminar.

Por ejemplo,

 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); ) ) ) 

Salida

 ArrayBlockingQueue: (Perro, Gato) Elemento eliminado: Perro 

Aquí, el take()método arrojará un InterrupedExceptionsi se interrumpe mientras espera. Por tanto, debemos encerrarlo dentro de un try… catchbloque.

Otros metodos

Métodos Descripciones
contains(element) Busca en la cola de bloqueo de la matriz el elemento especificado. Si se encuentra el elemento, regresa true, si no, regresa false.
size() Devuelve la longitud de la cola de bloqueo de la matriz.
toArray() Convierte la cola de bloqueo de matrices en una matriz y la devuelve.
toString() Convierte la cola de bloqueo de la matriz en una cadena

¿Por qué utilizar ArrayBlockingQueue?

Los ArrayBlockingQueueusos matrices como su almacenamiento interno.

Se considera una colección segura para subprocesos . Por lo tanto, generalmente se usa en aplicaciones de subprocesos múltiples.

Supongamos que un subproceso está insertando elementos en la cola y otro subproceso está eliminando elementos de la cola.

Ahora, si el primer hilo es más lento que el segundo hilo, entonces la cola de bloqueo de matriz puede hacer que el segundo hilo espere hasta que el primer hilo complete sus operaciones.

Articulos interesantes...