Breaking

Post Top Ad

Your Ad Spot

sábado, 21 de diciembre de 2019

Java ArrayBlockingQueue

En este tutorial, aprenderemos sobre la clase ArrayBlockingQueue y sus métodos con la ayuda de ejemplos.
anuncios a través de carbono¿Busca trabajo impactante, proyectos desafiantes + un equipo diverso? Codifica con nosotros.ANUNCIOS A TRAVÉS DE CARBONO
La ArrayBlockingQueueclase del marco de Java Collections proporciona la implementación de la cola de bloqueo utilizando una matriz.
Implementa la interfaz Java BlockingQueue .
ArrayBlockingQueue implementa la interfaz BlockingQueue en Java.

Creando ArrayBlockingQueue

Para crear una cola de bloqueo de matriz, debemos importar el java.util.concurrent.ArrayBlockingQueuepaquete.
Una vez que importamos el paquete, así es cómo podemos crear una cola de bloqueo de matriz en Java:
  1. ArrayBlockingQueue<Type> animal = new ArrayBlockingQueue<>(int capacity);
Aquí,
  • Tipo : el tipo de la cola de bloqueo de matriz
  • capacidad : el tamaño de la cola de bloqueo de matriz
Por ejemplo,
  1. // Creating String type ArrayBlockingQueue with size 5
  2. ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
  3. // Creating Integer type ArrayBlockingQueue with size 5
  4. ArrayBlockingQueue<Integer> 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 colas de bloqueo de matriz.
Además, aprenderemos sobre dos métodos put()take()que admiten la operación de bloqueo en la cola de bloqueo de matriz.
Estos dos métodos distinguen la cola de bloqueo de matriz 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. Regresa falsesi la cola está llena.
Por ejemplo,
  1. import java.util.concurrent.ArrayBlockingQueue;
  2. class Main {
  3. public static void main(String[] args) {
  4. ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
  5. // Using add()
  6. animals.add("Dog");
  7. animals.add("Cat");
  8. // Using offer()
  9. animals.offer("Horse");
  10. System.out.println("ArrayBlockingQueue: " + animals);
  11. }
  12. }
Salida
ArrayBlockingQueue: [Perro, Gato, Caballo]

Elementos de acceso

  • peek()- Devuelve un elemento desde el frente de la cola de bloqueo de la matriz. Regresa nullsi la cola está vacía.
  • iterator()- Devuelve un objeto iterador para acceder secuencialmente a elementos desde la cola de bloqueo de la matriz. Lanza una excepción si la cola está vacía. Debemos importar el java.util.Iteratorpaquete para usarlo.
Por ejemplo,
  1. import java.util.concurrent.ArrayBlockingQueue;
  2. import java.util.Iterator;
  3. class Main {
  4. public static void main(String[] args) {
  5. ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
  6. // Add elements
  7. animals.add("Dog");
  8. animals.add("Cat");
  9. animals.add("Horse");
  10. System.out.println("ArrayBlockingQueue: " + animals);
  11. // Using peek()
  12. String element = animals.peek();
  13. System.out.println("Accessed Element: " + element);
  14. // Using iterator()
  15. Iterator<String> iterate = animals.iterator();
  16. System.out.print("ArrayBlockingQueue Elements: ");
  17. while(iterate.hasNext()) {
  18. System.out.print(iterate.next());
  19. System.out.print(", ");
  20. }
  21. }
  22. }
Salida
ArrayBlockingQueue: [Perro, Gato, Caballo]
Elemento al que se accede: perro
Elementos ArrayBlockingQueue: perro, gato, caballo,

Eliminar elementos

  • remove()- Devuelve y elimina un elemento especificado de la cola de bloqueo de la matriz. Lanza una excepción si la cola está vacía.
  • poll()- Devuelve y elimina un elemento especificado de la cola de bloqueo de la matriz. Regresa nullsi la cola está vacía.
  • clear() - Elimina todos los elementos de la cola de bloqueo de la matriz.
Por ejemplo,
  1. import java.util.concurrent.ArrayBlockingQueue;
  2. class Main {
  3. public static void main(String[] args) {
  4. ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
  5. animals.add("Dog");
  6. animals.add("Cat");
  7. animals.add("Horse");
  8. System.out.println("ArrayBlockingQueue: " + animals);
  9. // Using remove()
  10. String element1 = animals.remove();
  11. System.out.println("Removed Element:");
  12. System.out.println("Using remove(): " + element1);
  13. // Using poll()
  14. String element2 = animals.poll();
  15. System.out.println("Using poll(): " + element2);
  16. // Using clear()
  17. animals.clear();
  18. System.out.println("Updated ArrayBlockingQueue: " + animals);
  19. }
  20. }
Salida
ArrayBlockingQueue: [Perro, Gato, Caballo]
Elementos eliminados:
Usando remove (): Perro
Usando poll (): Cat
ArrayBlockingQueue actualizado: []

Método put () y take ()

En procesos de subprocesos múltiples, podemos usar put()take()bloquear la operación de un hilo para sincronizarlo con otro hilo. Estos métodos esperarán hasta que puedan ejecutarse con éxito.

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 la matriz está llena, espera hasta que haya espacio en la cola de bloqueo de la matriz para agregar un elemento.
Por ejemplo,
  1. import java.util.concurrent.ArrayBlockingQueue;
  2. class Main {
  3. public static void main(String[] args) {
  4. ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
  5. try {
  6. // Add elements to animals
  7. animals.put("Dog");
  8. animals.put("Cat");
  9. System.out.println("ArrayBlockingQueue: " + animals);
  10. }
  11. catch(Exception e) {
  12. System.out.println(e);
  13. }
  14. }
  15. }
Salida
ArrayBlockingQueue: [Perro, Gato]
Aquí, el put()método puede arrojar un mensaje 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 la matriz, 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 que se eliminarán.
Por ejemplo,
  1. import java.util.concurrent.ArrayBlockingQueue;
  2. class Main {
  3. public static void main(String[] args) {
  4. ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
  5. try {
  6. //Add elements to animals
  7. animals.put("Dog");
  8. animals.put("Cat");
  9. System.out.println("ArrayBlockingQueue: " + animals);
  10. // Remove an element
  11. String element = animals.take();
  12. System.out.println("Removed Element: " + element);
  13. }
  14. catch(Exception e) {
  15. System.out.println(e);
  16. }
  17. }
  18. }
Salida
ArrayBlockingQueue: [Perro, Gato]
Elemento eliminado: perro
Aquí, el take()método arrojará un InterrupedExceptionsi se interrumpe mientras espera. Por lo tanto, debemos encerrarlo dentro de un try...catchbloque.

Otros metodos

MétodosDescripciones
contains(element)Busca en la cola de bloqueo de 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 matriz en una matriz y la devuelve.
toString()Convierte la cola de bloqueo de matriz en cadena

¿Por qué usar 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 hilo está insertando elementos en la cola y otro hilo está eliminando elementos de la cola.
Ahora, si el primer subproceso es más lento que el segundo subproceso, la cola de bloqueo de matriz puede hacer que el segundo subproceso espere hasta que el primer subproceso complete sus operaciones.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas