[Alta concurrencia] Sin tonterías, breve introducción a BlockingQueue

Escribir en frente

Recientemente, muchos internautas han dejado un mensaje para preguntar: En la programación concurrente de Java, hay un BlockingQueue, que es una cola de bloqueo. ¿Por qué usar BlockingQueue en la programación concurrente? Bueno, hoy, hablemos de BlockingQueue temporalmente, pero hoy no es muy profundo. Analicemos esta clase desde la fuente.

Descripción general de BlockingQueue

El bloqueo de la cola es seguro para subprocesos.

La situación bloqueada es la siguiente:

(1) Cuando la cola está llena, ingrese la operación de la cola
(2) Cuando la cola está vacía, realice la operación de la cola

Los escenarios de uso son los siguientes:

Principalmente en escenarios de productores y consumidores.

Método BlockingQueue

BlockingQueue tiene 4 métodos diferentes para insertar, eliminar e inspeccionar elementos en la cola. Si la operación solicitada no se puede realizar de inmediato, cada método se comporta de manera diferente. Estos métodos son los siguientes:

Lanzar excepción Valor especial Bloque Tiempo de espera
Insertar agregar (e) oferta (e) poner (e) oferta (e, tiempo, unidad)
Eliminar eliminar() encuesta() tomar() encuesta (tiempo, unidad)
Cheque elemento() ojeada() No disponible No disponible


Cuatro conjuntos diferentes de explicación comportamiento

  • Lanzar excepción

Si la operación intentada no se puede realizar de inmediato, arroje una excepción.

  • Valor especial

Si la operación intentada no se puede realizar de inmediato, se devuelve un valor específico (a menudo verdadero / falso).

  • Bloque

Si la operación intentada no se puede ejecutar de inmediato, la llamada al método se bloqueará hasta que se pueda ejecutar.

  • Tiempo de espera

Si la operación intentada no se puede ejecutar de inmediato, la llamada al método se bloqueará hasta que se pueda ejecutar, pero el tiempo de espera no excederá el valor dado. Devuelve un valor específico para saber si la operación fue exitosa (generalmente verdadero / falso).

Clase de implementación BlockingQueue

  • ArrayBlockingQueue: cola de bloqueo limitada (capacidad limitada, la capacidad se debe especificar durante la inicialización y no se puede cambiar después de que se especifique la capacidad). La implementación interna es una matriz que almacena datos en modo FIFO. El último objeto insertado es la cola. El objeto eliminado más recientemente es la cabeza.
  • DelayQueue: lo que está bloqueado es un elemento interno. Los elementos en DelayQueue deben implementar una interfaz retardada (existe bajo JUC). La interfaz retrasada hereda la interfaz comparable. Esto se debe a que los elementos de la interfaz retrasada deben ordenarse. En general, los elementos de la interfaz retrasada se ordenan según la prioridad del tiempo de caducidad de los elementos en la interfaz retrasada. Los escenarios de aplicación principales son: cierre regularmente la conexión, objetos de caché, procesamiento de tiempo de espera, etc. La implementación interna utiliza PriorityQueue y ReentrantLock.
  • LinkedBlockingQueue: la configuración del tamaño es opcional. Si el tamaño se especifica durante la inicialización, está limitado; si el tamaño no se especifica durante la inicialización, no tiene límites (de hecho, el tamaño predeterminado es el valor máximo del tipo Entero). Cuando se implementa internamente, una lista vinculada almacena datos en forma de FIFO, el último objeto insertado es la cola y el último objeto eliminado es la cabeza.
  • PriorityBlockingQueue: una cola de bloqueo con prioridad, sin límites, pero hay reglas de clasificación que permiten la inserción de objetos vacíos (es decir, nulos). Todos los objetos insertados deben implementar la interfaz Comparable, y el orden de prioridad de la cola se define de acuerdo con la implementación de la interfaz Comparable. Se puede obtener un iterador de PriorityBlockingQueue, pero este iterador no garantiza iterar en el orden de prioridad.
  • SynchronousQueue: solo se permite un elemento dentro de la cola. Cuando un subproceso inserta un elemento, se bloqueará a menos que el elemento sea consumido por otro subproceso. Por lo tanto, SynchronousQueue también se llama cola de sincronización. SynchronousQueue es una cola no en caché sin límites. Hablando con precisión, no almacena elementos. Los elementos de colocación solo se pueden volver a colocar después de esperar a que se eliminen los elementos.

Escribe al final

Si el artículo le resulta útil, busque y siga la cuenta de WeChat de " Binghe Technology " en WeChat, y aprenda técnicas de programación de alta concurrencia con Binghe.

Finalmente, adjunte el mapa de conocimiento de habilidades básicas que la programación concurrente necesita dominar. Deseo que eviten desvíos cuando aprendan programación concurrente.

sandahexin_20200322

Supongo que te gusta

Origin www.cnblogs.com/binghe001/p/12723469.html
Recomendado
Clasificación