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: Guía Avanzada de Colas de Bloqueo y Operaciones Thread-Safe

Java ArrayBlockingQueue

Explora ArrayBlockingQueue de Java – aprende a crear, manipular y usar thread-safely esta cola de bloqueo de tamaño fijo con ejemplos claros.

La clase ArrayBlockingQueue en el Framework de Colecciones de Java proporciona una cola acotada, thread-safe respaldada por un array. Implementa la interfaz BlockingQueue, permitiendo a productores y consumidores coordinarse vía operaciones de bloqueo.

Java ArrayBlockingQueue: Guía Avanzada de Colas de Bloqueo y Operaciones Thread-Safe


Creando un ArrayBlockingQueue

Importa java.util.concurrent.ArrayBlockingQueue e instancia con una capacidad fija:

ArrayBlockingQueue<Tipo> cola = new ArrayBlockingQueue<>(capacidad);

Donde Tipo es el tipo de elemento y capacidad es el tamaño máximo.

Nota: La capacidad es obligatoria; determina el tamaño acotado de la cola.


Métodos Principales de ArrayBlockingQueue

La clase implementa todos los métodos de BlockingQueue para insertar, acceder y eliminar elementos. A continuación, las operaciones más usadas.

Insertar Elementos

ArrayBlockingQueue<String> animales = new ArrayBlockingQueue<>(5);
animales.add("Perro");
animales.offer("Gato");
animales.offer("Caballo");
System.out.println("ArrayBlockingQueue: " + animales);

Salida: ArrayBlockingQueue: [Perro, Gato, Caballo]

Acceder a Elementos

String cabeza = animales.peek();
System.out.println("Elemento cabeza: " + cabeza);
Iterator<String> it = animales.iterator();
while (it.hasNext()) {
    System.out.print(it.next() + ", ");
}

Salida: Elemento cabeza: Perro seguido de la lista de elementos.

Eliminar Elementos

String eliminado1 = animales.remove();
String eliminado2 = animales.poll();
animales.clear();
System.out.println("Cola actualizada: " + animales);

Salida: Cola actualizada: []


Operaciones de Bloqueo: put() y take()

Estos métodos son esenciales para patrones productor-consumidor. Bloquean hasta que la operación pueda realizarse, asegurando coordinación de hilos.

put()

Inserta un elemento, esperando si la cola está llena. Puede lanzar InterruptedException.

try {
    animales.put("Perro");
    animales.put("Gato");
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

take()

Elimina y devuelve la cabeza, esperando si la cola está vacía. Puede lanzar InterruptedException.

try {
    String elemento = animales.take();
    System.out.println("Eliminado: " + elemento);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

Métodos de Conveniencia Adicionales

MétodoDescripción
contains(Object o)Devuelve true si la cola contiene el elemento especificado.
size()Devuelve el número actual de elementos.
toArray()Convierte la cola a un array.
toString()Representación en cadena de la cola.

Por Qué Usar ArrayBlockingQueue

Porque ofrece:

Cuando un hilo produce más lento que el consumidor, el consumidor se bloquea automáticamente, evitando espera activa y asegurando uso eficiente de CPU.

Java

  1. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  2. Comentarios en Java: Tipos, Uso y Mejores Prácticas
  3. Dominar if…else en Java: Control de Flujo Explicado
  4. Dominar el Bucle for Mejorado en Java: Sintaxis, Ejemplos y Mejores Prácticas
  5. Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
  6. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  7. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  8. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  9. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  10. Aserciones en Java: Guía práctica para detectar bugs y asegurar fiabilidad del código
  11. Entendiendo Java Vector: Uso, Características y Comparación con ArrayList