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

Cola de bloqueo de Java

Cola de bloqueo de Java

En este tutorial, aprenderemos sobre la interfaz Java BlockingQueue y sus métodos.

El BlockingQueue interfaz de Java Collections framework extiende el Queue interfaz. Permite que cualquier operación espere hasta que se pueda realizar con éxito.

Por ejemplo, si queremos eliminar un elemento de una cola vacía, entonces la cola de bloqueo permite que la operación de eliminación espere hasta que la cola contenga algunos elementos para eliminar.


Clases que implementan BlockingQueue

Desde BlockingQueue es una interfaz, no podemos proporcionar la implementación directa de la misma.

Para utilizar la funcionalidad del BlockingQueue , necesitamos usar clases que lo implementen.


¿Cómo usar colas de bloqueo?

Debemos importar el java.util.concurrent.BlockingQueue paquete para usar BlockingQueue .

// Array implementation of BlockingQueue
BlockingQueue<String> animal1 = new ArraryBlockingQueue<>();

// LinkedList implementation of BlockingQueue
BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();

Aquí, hemos creado objetos animal1 y animal2 de clases ArrayBlockingQueue y LinkedBlockingQueue , respectivamente. Estos objetos pueden usar las funcionalidades del BlockingQueue interfaz.


Métodos de BlockingQueue

Según si una cola está llena o vacía, los métodos de una cola de bloqueo se pueden dividir en 3 categorías:

Métodos que lanzan una excepción


Métodos que devuelven algún valor

Más en oferta() y encuesta()

El offer() y poll() El método se puede utilizar con tiempos de espera. Es decir, podemos pasar unidades de tiempo como parámetro. Por ejemplo,

offer(value, 100, milliseconds)

Aquí,

Esto significa el offer() El método intentará insertar un elemento en la cola de bloqueo para 100 milisegundos. Si el elemento no se puede insertar en 100 milisegundos, el método devuelve false .

Nota: En lugar de milliseconds , también podemos usar estas unidades de tiempo:days , hours , minutes , seconds , microseconds y nanoseconds en offer() y poll() métodos.


Métodos que bloquean la operación

El BlockingQueue también proporciona métodos para bloquear las operaciones y esperar si la cola está llena o vacía.

Supongamos que queremos insertar elementos en una cola. Si la cola está llena, el put() esperará hasta que la cola tenga espacio para insertar elementos.

Del mismo modo, si queremos eliminar elementos de una cola. Si la cola está vacía entonces el take() esperará hasta que la cola contenga elementos para eliminar.


Implementación de BlockingQueue en ArrayBlockingQueue

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;

class Main {

    public static void main(String[] args) {
      // Create a blocking queue using the ArrayBlockingQueue
      BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5);

      try {
        // Insert element to blocking queue
        numbers.put(2);
        numbers.put(1);
        numbers.put(3);
        System.out.println("BLockingQueue: " + numbers);

        // Remove Elements from blocking queue
        int removedNumber = numbers.take();
        System.out.println("Removed Number: " + removedNumber);
      }

      catch(Exception e) {
          e.getStackTrace();
      }
    }
}

Salida

BlockingQueue: [2, 1, 3]
Removed Element: 2

Para obtener más información sobre ArrayBlockingQueue , visite Java ArrayBlockingQueue.


¿Por qué BlockingQueue?

En Java, BlockingQueue se considera como seguro para subprocesos recopilación. Es porque puede ser útil en operaciones 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 se ejecuta más lento, entonces la cola de bloqueo puede hacer que el segundo subproceso espere hasta que el primer subproceso complete su operación.


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