¿Qué es BlockingQueue seguro para subprocesos en Java? ¿Cuándo debes usarlo? Implementación adjunta

Publicado: 2021-04-30
¿Qué es Threadsafe BlockingQueue en Java y cuándo debería usarlo?

Hasta ahora he escrito dos artículos sobre el concepto Producer Consumer en Crunchify. El primero para explicar Java Semaphore y Mutex y el segundo para explicar la lectura/escritura simultánea.

En este tutorial de Java, repasaremos el mismo concepto de productor/consumidor para explicar BlockingQueue in Java .

¿Cuáles son las ventajas de Blocking Queue en Java?

Una java.util.Queue admite operaciones que esperan a que la cola deje de estar vacía al recuperar un elemento y espera a que haya espacio disponible en la cola al almacenar un elemento.

java.util.BlockingQueue en java - Crunchify

Necesitamos crear cuatro clases de Java:

  1. CrunchifyMessage.java para poner y recibir mensajes
  2. CrunchifyBlockingProducer.java para poner el mensaje en cola
  3. CrunchifyBlockingConsumer.java para obtener el mensaje de la cola
  4. CrunchifyBlockingMain.java para iniciar la prueba

Las implementaciones de BlockingQueue son thread-safe . Todos los métodos de cola son de naturaleza atómica y utilizan bloqueos internos.

Comencemos con la implementación de Thread-Safe BlockingQueue en Java

Paso 1

Crea la clase CrunchifyMessage.java . Este es un objeto Java simple.

Paso 2

Cree el productor CrunchifyBlockingProducer.java que creó un mensaje simple y lo puso en cola.

Paso 3

Cree la clase CrunchifyBlockingConsumer.java que consume el mensaje de la cola.

Etapa 4

Cree el método simple CrunchifyBlockingMain.java que ejecuta la prueba BlockingQueue. Ejecute este programa para verificar el comportamiento de BlockingQueue.

Una BlockingQueue no acepta elementos nulos . Las implementaciones lanzan NullPointerException en los intentos de agregar , poner u ofrecer un valor nulo .

Un valor nulo se usa como valor centinela para indicar fallas en las operaciones de sondeo .

Resultado:

¿Cuándo debemos usar java.util.concurrent.BlockingQueue?

  • Cuando desee acelerar algún tipo de solicitud entrante, debe usar el mismo
  • Los productores pueden adelantarse mucho a los consumidores con una cola ilimitada. Si el consumidor no se está poniendo al día con el productor, puede causar un OutOfMemoryError . En situaciones como estas, puede ser mejor señalar a un posible productor que la cola está llena y darse por vencido rápidamente si falla.
    • En otras palabras: los productores están naturalmente estrangulados.
  • La cola de bloqueo se usa normalmente en aplicaciones concurrentes
  • Proporciona una implementación correcta y segura para subprocesos.
  • El consumo de memoria también debe ser limitado