Diferencia entre ArrayBlockingQueue y LinkedBlockingQueue

ArrayBlockingQueue y LinkedBlockingQueue en Java Collection son las implementaciones comunes de la interfaz BlockingQueue .

ArrayBlockingQueue : ArrayBlockingQueue es una clase en Java que implementa lainterfaz BlockingQueue . La clase ArrayBlockingQueue y su iterador implementan la operación ArrayBlockingQueue internamente (primero en entrar, primero en salir)

LinkedBlockingQueue delimitado opcionalmente, Integer.MAX_VALUE La clase BlockingQueue y su iterador se implementan internamente (primero en entrar, primero en salir)

Java

// Java program to demonstrate LinkedBlockingQueue
  
import java.util.concurrent.LinkedBlockingQueue;
  
public class LinkedBlockingQueueDemo {
  
    public static void main(String[] args)
    {
        // define capacity of LinkedBlockingQueue
        int capacity = 15;
  
        // create object of LinkedBlockingQueue
        LinkedBlockingQueue<Integer> lbq
            = new LinkedBlockingQueue<Integer>(capacity);
  
        // add numbers
        lbq.add(1);
        lbq.add(2);
        lbq.add(3);
  
        // print queue
        System.out.println("LinkedBlockingQueue:" + lbq);
    }
}
Producción

LinkedBlockingQueue:[1, 2, 3]

Demostración de ArrayBlockingQueue

Java

// Java program to demonstrate
// ArrayBlockingQueue
  
import java.util.concurrent.ArrayBlockingQueue;
  
public class ArrayBlockingQueueDemo {
  
    public static void main(String[] args)
    {
        // define capacity of ArrayBlockingQueue
        int capacity = 15;
  
        // create object of ArrayBlockingQueue
        // using ArrayBlockingQueue(int initialCapacity)
        // constructor
        ArrayBlockingQueue<Integer> abq
            = new ArrayBlockingQueue<Integer>(capacity);
  
        // add numbers
        abq.add(1);
        abq.add(2);
        abq.add(3);
  
        // print queue
        System.out.println("ArrayBlockingQueue:" + abq);
    }
}
Producción

ArrayBlockingQueue:[1, 2, 3]

       ArrayBlockingQueue

                                  LinkedBlockingQueue

Almacena los elementos internamente en una array. Almacena los elementos internamente en Nodes vinculados.
ArrayBlockingQueue está limitado, lo que significa que el tamaño nunca cambiará después de su creación. LinkedBlockingQueue tiene un límite opcional, lo que significa que puede tener un límite superior si lo desea. Si no se especifica un límite superior, se utiliza Integer.MAX_VALUE como límite superior.
Tiene un rendimiento más bajo que las colas de Nodes vinculados. Tiene un mayor rendimiento que las colas basadas en arreglos.
Utiliza el algoritmo de condición doble de bloqueo único. Significa que productor y consumidor comparten un mismo candado. Utiliza dos algoritmos de cola de bloqueo y tiene dos condiciones de bloqueo putLock y takeLock para insertar y eliminar elementos respectivamente de la cola.
ArrayBlockingQueue siempre contiene una array de objetos LinkedBlockingQueue es un Node vinculado con un objeto con tres campos de objeto.

Publicación traducida automáticamente

Artículo escrito por prashant_srivastava y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *