mismo:
1. LinkedBlokingqueue y ArrayBlockingqueue implementan la interfaz BLOCKINGQUEUE;
2. Linked Blokingqueue y ArrayBlokingqueue son colas bloqueables
Reentrantlock y condición se utilizan internamente para garantizar la sincronización de la producción y el consumo;
Cuando la cola está vacía, el hilo del consumidor está bloqueado; Cuando la cola está llena, el hilo del productor está bloqueado;
Use el método de condición para sincronizar y comunicar: Await () y Signal ()
diferente:
1. Como se puede ver en la imagen de arriba, su mecanismo de bloqueo es diferente.
Las cerraduras en Linked Bloquingqueue están separadas, el bloqueo del productor y el Takelock de bloqueo del consumidor
Los productores y consumidores de ArrayBlokingqueue usan el mismo bloqueo;
2. Su mecanismo de implementación subyacente también es diferente
Linked Bloquingqueue mantiene una estructura de lista vinculada internamente
Durante la producción y el consumo, los objetos de nodo deben crearse para inserción o eliminación. En sistemas con grandes lotes de datos, la presión sobre GC será mayor.
ArrayBlockingqueue mantiene una matriz internamente
Durante la producción y el consumo, los objetos de enumeración se insertan o eliminan directamente, y no se generan ni destruyen instancias de objetos adicionales.
3. Diferencias en la construcción
Linked Bloquingqueue tiene un tamaño de capacidad predeterminado: Integer.max_value, por supuesto, también puede pasar en el tamaño de capacidad especificado.
Al inicializar ArrayBlockingqueue, se debe pasar un valor de capacidad.
Puede saber observando el método de construcción proporcionado por él
4. Ejecutar el método Clear ()
Cuando Linked Bloquingqueue ejecuta el método BLEAR, se agregarán dos bloqueos.
5. Estadísticas el número de elementos
Se utiliza un objeto AtomicInteger en Linked Bloquingqueue para contar el número de elementos
ArrayBlockingqueue usa el tipo int para contar elementos