Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java ArrayBlockingQueue

Java ArrayBlockingQueue

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

El ArrayBlockingQueue La clase del marco de 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 matriz, debemos importar el java.util.concurrent.ArrayBlockingQueue paquete.

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

ArrayBlockingQueue<Type> animal = new ArrayBlockingQueue<>(int capacity);

Aquí,

Por ejemplo,

// Creating String type ArrayBlockingQueue with size 5
ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);

// Creating Integer type ArrayBlockingQueue with size 5
ArrayBlockingQueue<Integer> age = new ArrayBlockingQueue<>(5);

Nota: Es obligatorio proporcionar el tamaño de la matriz.


Métodos de ArrayBlockingQueue

El ArrayBlockingQueue class proporciona la implementación de todos los métodos en el BlockingQueue interfaz.

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 matriz de otras colas típicas.


Insertar elementos

Por ejemplo,

import java.util.concurrent.ArrayBlockingQueue;

class Main {
    public static void main(String[] args) {
        ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);

        // Using add()
        animals.add("Dog");
        animals.add("Cat");

        // Using offer()
        animals.offer("Horse");
        System.out.println("ArrayBlockingQueue: " + animals);
    }
}

Salida

ArrayBlockingQueue: [Dog, Cat, Horse]

Elementos de acceso

Por ejemplo,

import java.util.concurrent.ArrayBlockingQueue;
import java.util.Iterator;

class Main {
    public static void main(String[] args) {
        ArrayBlockingQueue<String> 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<String> iterate = animals.iterator();
        System.out.print("ArrayBlockingQueue Elements: ");

        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Salida

ArrayBlockingQueue: [Dog, Cat, Horse]
Accessed Element: Dog
ArrayBlockingQueue Elements: Dog, Cat, Horse,

Eliminar elementos

Por ejemplo,

import java.util.concurrent.ArrayBlockingQueue;

class Main {
    public static void main(String[] args) {
        ArrayBlockingQueue<String> 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: [Dog, Cat, Horse]
Removed Elements:
Using remove(): Dog
Using poll(): Cat
Updated 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 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 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<String> 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: [Dog, Cat]

Aquí, el put() el método puede arrojar un InterruptedException si se interrumpe durante la espera. Por lo tanto, debemos encerrarlo dentro de un try..catch bloquear.


Método tomar()

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

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

Por ejemplo,

import java.util.concurrent.ArrayBlockingQueue;

class Main {
    public static void main(String[] args) {
        ArrayBlockingQueue<String> 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: [Dog, Cat]
Removed Element: Dog

Aquí, el take() arrojará un InterrupedException si se interrumpe durante la espera. Por lo tanto, debemos encerrarlo dentro de un try...catch bloquear.


Otros métodos

Métodos Descripciones
contains(element) Busca en la cola de bloqueo de matriz el elemento especificado.Si se encuentra el elemento, devuelve true , si no, devuelve false .
size() Devuelve la longitud de la cola de bloqueo del arreglo.
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?

El ArrayBlockingQueue utiliza matrices como su almacenamiento interno.

Se considera como seguro para subprocesos recopilación. 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 subproceso es más lento que el segundo, entonces la cola de bloqueo de matriz puede hacer que el segundo subproceso espere hasta que el primer subproceso complete sus operaciones.


Java

  1. Operadores Java
  2. Comentarios Java
  3. Declaración if...else de Java
  4. Java para cada bucle
  5. Cadenas Java
  6. Interfaz Java
  7. Clase anónima de Java
  8. Prueba de Java con recursos
  9. Anotaciones Java
  10. Aserciones de Java
  11. Java Vector