English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Control de flujo Java

Java array

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Manejo de excepciones en Java

Java Lista (List)

Java Queue (cola)

Java Map colección

Java Set colección

Java Entrada Salida (I)/O)

Java Reader/Writer

Java Otros temas

Java BlockingQueue

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

La interfaz BlockingQueue del framework Java Collections extiende la interfaz Queue. Permite que cualquier operación espere hasta que se ejecute con éxito.

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

Clases que implementan BlockingQueue

Dado que BlockingQueue es una interfaz, no podemos proporcionar su implementación directa.

Para usar las funciones de BlockingQueue, necesitamos usar las clases que lo implementan.

¿Cómo usar la cola bloqueada?

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

//Implementación de Array de BlockingQueue
BlockingQueue<String> animal1 = new ArraryBlockingQueue<>();
//Implementación de LinkedList de BlockingQueue
BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();

Aquí, creamos los objetos animal de las clases ArrayBlockingQueue y LinkedBlockingQueue1y animal2. Estos objetos pueden usar las funciones de la interfaz BlockingQueue.

Métodos de BlockingQueue

Según si la cola está llena o vacía, los métodos de la cola bloqueada se pueden dividir en3Clase:

Método que lanza una excepción

  • add() - Inserta el elemento en el final de la cola bloqueada. Si la cola está llena, lanza una excepción.

  • element() - Devuelve la cabeza de la cola bloqueada. Si la cola está vacía, lanza una excepción.

  • remove() -Elimina un elemento de la cola bloqueada. Si la cola está vacía, lanza una excepción.

Método para devolver un valor

  • offer() - Inserta el elemento especificado al final de la cola bloqueada. Si la cola está llena, devuelve false.

  • peek() - Devuelve la cabeza de la cola bloqueada. Si la cola está vacía, devuelve null.

  • poll() - Elimina un elemento de la cola bloqueada. Si la cola está vacía, devuelve null.

offer()和poll()更多内容

offer()和poll()方法可以与超时一起使用。也就是说,我们可以传递时间单位作为参数。例如,

offer(value, 100, milliseconds)

这里,

  • value 是要插入队列的元素

  • 并且我们将超时设置为100毫秒

这意味着offer()方法将尝试向阻塞队列插入一个元素,时间为100毫秒。如果100毫秒内无法插入元素,该方法将返回false。

注:除了毫秒以外,我们还可以在offer()和poll()方法中使用以下时间单位:days,hours,minutes,seconds,microseconds和nanoseconds。

BlockingQueue的操作方法

BlockingQueue还提供了一些方法来阻塞操作和等待,如果队列满或空。

  • put() - 将元素插入到阻塞队列。如果队列已满,它将等待直到队列有空间插入元素。

  • take() - 从阻塞队列中移除并返回一个元素。如果队列为空,它将等待,直到队列中有要删除的元素。

假设,我们想要向队列中插入元素。如果队列已满,那么put()方法将等待,直到队列有空间插入元素。

同样,如果我们想从队列中删除元素。如果队列为空,那么take()方法将等待,直到队列包含要删除的元素。

ArrayBlockingQueue中BlockingQueue的实现

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
class Main {
    public static void main(String[] args) {
      //使用ArrayBlockingQueue创建一个阻塞队列
      BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5);
      try {
        //将元素插入到阻塞队列
        numbers.put(2);
        numbers.put(1);
        numbers.put(3);
        System.out.println("BLockingQueue: " + numbers);
        //从阻塞队列中移除元素
        int removedNumber = numbers.take();
        System.out.println("Número eliminado: ") + removedNumber);
      }
      catch(Exception e) {
          e.getStackTrace();
      }
    }
}

Resultado de salida

BlockingQueue: [2, 1, 3]
Elemento eliminado: 2

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

¿Por qué elegir BlockingQueue?

En Java, BlockingQueue se considera线程安全的conjunto. Esto se debe a que podría ayudar en operaciones de múltiples hilos.

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

Ahora, si el primer hilo se ejecuta lentamente, la cola de bloqueo permite que el segundo hilo espere hasta que el primer hilo complete su operación.