¿Qué es BlockingQueue en Java y cómo implementarlo?



Este artículo sobre BlockingQueue en Java le ayudará a aprender sobre la interfaz BlockingQueue. También le dará información sobre sus métodos y su implementación práctica.

es extremadamente popular entre los programadores debido a su amplia gama de funciones integradas. La mayoría de las veces tendrá una solución dedicada a su problema incluso antes de que aparezca. Una parte tan extremadamente útil e importante de es la interfaz BlockingQueue en Java. A través de este artículo, arrojaré algo de luz sobre BlockingQueue en Java y los métodos para implementarlo.

A continuación, se muestran los temas cubiertos en este artículo:





Interfaz BlockingQueue en Java

BlockingQueue en Java es una interfaz que se agregó en Java 1.5 junto con algunas otras clases de utilidades concurrentes como ConcurrentHashMap, CopyOnWriteArrrayList, etc. La interfaz BlockingQueue pertenece a la java.util.concurrent paquete .Esta interfaz mejora el control de flujo activando el bloqueo, en caso de que un hilo intente sacar una cola vacía o poner en cola una cola llena. En cualquier caso, esta interfaz es útil.En términos más simples, suponga está intentando agregar elementos a una cola ya llena. En este punto del programa, se invocará BlockingQueue, lo que bloqueará ese hilo en particular hasta que otro hilo libere la cola para hacer espacio. Esto puede ser el resultado de la eliminación de la cola de un elemento o de la eliminación de toda la cola. De manera similar, se invocará BlockingQueue para bloquear un hilo que intenta quitar de la cola una cola ya vacía hasta que otro hilo inserte o agregue un elemento en el vacío. cola .

lo que todos pueden monitorear nagios

Mientras trabaja con la interfaz BlockingQueue en Java, debe recordar que no acepta un valor nulo. En caso de que intente hacer eso, instantáneamente lanzará una NullPointerException. La siguiente figura representa el funcionamiento de la interfaz BlockingQueue en Java.



BlockingQueue - BlockingQueue en Java - EdurekaEsta interfaz se utiliza principalmente entre productores y consumidores, ya que es seguro para subprocesos.Lo que quiero decir es que la interfaz BlockingQueue se puede usar para crear una cola que puede ser compartida tanto por el productor como por el consumidor.

Para trabajar con BlockingQueue en Java, primero debe familiarizarse con sus tipos. Permítanme presentarles en la siguiente sección de este artículo.

Tipos de constructores para BlockingQueue en Java

Hay dos tipos de constructores para la interfaz BlockingQueue en Java:



  • Cola ilimitada: Para este tipo de cola, la capacidad se establecerá en Integer.MAX_VALUE. Una cola ilimitada nunca se bloqueará, ya que puede crecer dinámicamente cada vez que se inserta un elemento en ella. A continuación se muestra la sintaxis para crear una cola ilimitada:
BlockingQueue bq = nuevo LinkedBlockingDeque ()
  • Cola limitada: Para este tipo de cola, debe pasar la capacidad de la cola en el momento de su creación, es decir, como constructor parámetro. Una vez que se asigna el tamaño, no se puede cambiar. A continuación se muestra la sintaxis para crear una cola acotada:
BlockingQueue bq = nuevo LinkedBlockingDeque (10)

Ahora que está familiarizado con las formas de implementar BlockingQueue en Java, permítame enumerar algunos de sus métodos.

Métodos en la interfaz BlockingQueue

Método Descripción
suma booleana (E e) Este método ayuda a insertar el elemento especificado en esta cola si hay espacio en la cola, de lo contrario lo harálanzar unIllegalStateException
booleano contiene (Objeto o) Este método devuelve verdadero si la cola contiene el elemento especificado
int drenajeTo (Colección c) Este método eliminará todos los elementos disponibles de la cola y los agregará a la colección especificada
int drenajeTo (Colección c, int maxElements) Este método eliminará el número dado de elementos disponibles de la cola y los agregará al número especificado.
oferta booloean (E e) Este método insertará el elemento especificado en la cola si no está lleno y devolverá verdadero, de lo contrario devolverá falso
oferta booleana (E e, tiempo de espera prolongado, unidad TimeUnit) Este método insertará el elemento especificado en la cola. En caso de que la cola esté llena, esperará hasta el tiempo de espera especificado para que el espacio esté disponible.
Encuesta E (tiempo de espera prolongado, unidad TimeUnit) Este método ayuda a recuperar y eliminar el encabezado de la cola. En caso de que la cola esté vacía, esperará hasta el tiempo de espera especificado para que un elemento esté disponible
poner vacío (E e) Este método insertará el elemento especificado en la cola esperando que haya espacio disponible en caso de que la cola esté llena
int capacidad restante () Este método ayuda a devolver la cantidad de elementos adicionales que esta cola puede aceptar idealmente sin bloquearse
boolean eliminar (Objeto o) Este método eliminará una única instancia del elemento especificado de la cola solo si está presente
E toma () Este método ayudará a recuperar y eliminar el encabezado de la cola esperando a que un elemento esté disponible, en caso de que la cola esté vacía.

Implementaciones de BlockingQueue

Aquí implementaré un ejemplo simple de BlockingQueue en Java dondeLa clase EduProducer generará los datos y los insertará en un cola , simultáneamente, otra clase, EduConsumer eliminará los datos de la misma cola.

Para esto estaré creando 3 clases a saber:

  1. EduProducer
  2. EduConsumer
  3. EdurekaMain

Creemos ahora cada una de estas clases una por una.

EduProducer.java

valor predeterminado para cadena en java
paquete edureka import java.util.concurrent.BlockingQueue clase pública EduProducer implementa Runnable {cola BlockingQueue final privada @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). interrupt ()} } private void process () lanza InterruptedException {// Pon 10 entradas en la cola para (int i = 0 i<10 i++) { System.out.println('[Producer] Add : ' + i) queue.put(i) System.out.println('[Producer] Queue's Remaining Capacity : ' + queue.remainingCapacity()) Thread.sleep(150) } } public EduProducer(BlockingQueue queue) { this.queue = queue } }

EduConsumer.java

paquete edureka import java.util.concurrent.BlockingQueue clase pública EduConsumer implementa Runnable {cola BlockingQueue final privada @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Interrupt ()}} proceso nulo privado (toma de entero) arroja InterruptedException {System.out.println ('[Consumidor] Eliminar:' + toma) Thread.sleep (500)} público EduConsumer (cola de BlockingQueue) {this.queue = queue}}

EdurekaMain.java

paquete edureka import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue public class EdurekaMain {public static void main (String [] args) {BlockingQueue queue = new LinkedBlockingQueue (10) new Thread (new EduProducer (queue)) .start () nuevo hilo (nuevo EduConsumer (cola)). start ()}}

Una vez que haya terminado de escribir el código, ejecute el programa para obtener el siguiente resultado:

cómo hacer una matriz dinámica en java
[Productor] Agregar: 0 [Consumidor] Tomar: 0 [Productor] Capacidad restante de la cola: 9 [Productor] Agregar: 1 [Productor] Capacidad restante de la cola: 9 [Productor] Agregar: 2 [Productor] Capacidad restante de la cola: 8 [Productor ] Agregar: 3 [Productor] Capacidad restante de la cola: 7 [Consumidor] Tomar: 1 [Productor] Agregar: 4 [Productor] Capacidad restante de la cola: 7 [Productor] Agregar: 5 [Productor] Capacidad restante de la cola: 6 [Productor] Agregar : 6 [Productor] Capacidad restante de la cola: 5 [Consumidor] Toma: 2 [Productor] Agregar: 7 [Productor] Capacidad restante de la cola: 5 [Productor] Agregar: 8 [Productor] Capacidad restante de la cola: 4 [Productor] Agregar: 9 [Productor] Capacidad restante de la cola: 3 [Consumidor] Toma: 3 [Consumidor] Toma: 4 [Consumidor] Toma: 5 [Consumidor] Toma: 6 [Consumidor] Toma: 7 [Consumidor] Toma: 8 [Consumidor] Toma: 9

Esto nos lleva al final de este artículo sobre BlockingQueue en Java. Si desea aprender Java con más detalle, puede consultar nuestro también.

Ahora que ha entendido los conceptos básicos de BlockingQueue en Java, consulte el por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. El curso de formación y certificación Java J2EE y SOA de Edureka está diseñado para estudiantes y profesionales que desean ser desarrolladores de Java. El curso está diseñado para darle una ventaja en la programación de Java y capacitarlo para los conceptos básicos y avanzados de Java junto con varios marcos de Java como Hibernate y Spring.

Tienes una pregunta para nosotros? Por favor, menciónelo en la sección de comentarios de este 'BlockingQueue en Java' y nos comunicaremos con usted lo antes posible.