Breaking

Post Top Ad

Your Ad Spot

sábado, 21 de diciembre de 2019

Java BlockingQueue

En este tutorial, aprenderemos sobre la interfaz Java BlockingQueue y sus métodos.
anuncios a través de carbonoReúna a su equipo con Slack, el centro de colaboración para el trabajo.ANUNCIOS A TRAVÉS DE CARBONO
La BlockingQueueinterfaz del Collectionsmarco de Java extiende la Queueinterfaz. Permite que cualquier operación espere hasta que pueda realizarse 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 ser eliminados.

Clases que implementan BlockingQueue

Como BlockingQueuees una interfaz, no podemos proporcionar la implementación directa de la misma.
Para usar la funcionalidad de BlockingQueue, necesitamos usar clases que lo implementen.
  • ArrayBlockingQueue
  • LinkedBlockingQueue
ArrayBlockingQueue y LinkedBlockingQueue implementan la interfaz BlockingQueue en Java.

¿Cómo usar las colas de bloqueo?

Debemos importar el java.util.concurrent.BlockingQueuepaquete para poder usarlo BlockingQueue.
  1. // Array implementation of BlockingQueue
  2. BlockingQueue<String> animal1 = new ArraryBlockingQueue<>();
  3. // LinkedList implementation of BlockingQueue
  4. BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();
Aquí, hemos creado objetos animal1 y animal2 de clases ArrayBlockingQueueLinkedBlockingQueue, respectivamente. Estos objetos pueden usar las funcionalidades de la BlockingQueueinterfaz.

Métodos de bloqueo

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 arrojan una excepción

  • add()- Inserta un elemento en la cola de bloqueo al final de la cola. Lanza una excepción si la cola está llena.
  • element()- Devuelve el encabezado de la cola de bloqueo. Lanza una excepción si la cola está vacía.
  • remove()- Elimina un elemento de la cola de bloqueo. Lanza una excepción si la cola está vacía.

Métodos que devuelven algún valor.

  • offer()- Inserta el elemento especificado en la cola de bloqueo al final de la cola. Devuelve falsesi la cola está llena.
  • peek()- Devuelve el encabezado de la cola de bloqueo. Devuelve nullsi la cola está vacía.
  • poll()- Elimina un elemento de la cola de bloqueo. Devuelve nullsi la cola está vacía.
Más en oferta () y encuesta ()
El método offer()poll()se puede usar con tiempos de espera. Es decir, podemos pasar unidades de tiempo como parámetro. Por ejemplo,
  1. offer(value, 100, milliseconds)
Aquí,
  • valor es el elemento que se insertará en la cola
  • Y hemos establecido un tiempo de espera de 100 milisegundos
Esto significa que el offer()método intentará insertar un elemento en la cola de bloqueo durante 100milisegundos. Si el elemento no se puede insertar en 100 milisegundos, el método vuelve false.
Nota: En lugar de milliseconds, también podemos utilizar estas unidades de tiempo: dayshoursminutessecondsmicrosecondsnanosecondsen offer()poll()métodos.

Métodos que bloquean la operación.

El BlockingQueuetambién proporciona métodos para bloquear las operaciones y esperar si la cola está llena o vacía.
  • put()- Inserta un elemento en la cola de bloqueo. Si la cola está llena, esperará hasta que la cola tenga espacio para insertar un elemento.
  • take()- Elimina y devuelve un elemento de la cola de bloqueo. Si la cola está vacía, esperará hasta que la cola tenga elementos para eliminar.
Supongamos que queremos insertar elementos en una cola. Si la cola está llena, el put()método 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, el take()método esperará hasta que la cola contenga elementos para eliminar.

Implementación de BlockingQueue en ArrayBlockingQueue

  1. import java.util.concurrent.BlockingQueue;
  2. import java.util.concurrent.ArrayBlockingQueue;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Create a blocking queue using the ArrayBlockingQueue
  6. BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5);
  7. try {
  8. // Insert element to blocking queue
  9. numbers.put(2);
  10. numbers.put(1);
  11. numbers.put(3);
  12. System.out.println("BLockingQueue: " + numbers);
  13. // Remove Elements from blocking queue
  14. int removedNumber = numbers.take();
  15. System.out.println("Removed Number: " + removedNumber);
  16. }
  17. catch(Exception e) {
  18. e.getStackTrace();
  19. }
  20. }
  21. }
Salida
BlockingQueue: [2, 1, 3]
Elemento eliminado: 2
Para obtener más información ArrayBlockingQueue, visite Java ArrayBlockingQueue .

¿Por qué BlockingQueue?

En Java, BlockingQueuese considera la colección segura para subprocesos . Es porque puede ser útil en operaciones de subprocesos múltiples.
Supongamos que un hilo está insertando elementos en la cola y otro hilo está eliminando elementos de la cola.
Ahora, si el primer subproceso se ejecuta más lentamente, la cola de bloqueo puede hacer que el segundo subproceso espere hasta que el primer subproceso complete su operación.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas