Herramienta de programación concurrente de Java JUC Parte siete: BlockingDeque Cola de bloqueo de doble extremo

En el artículo anterior, presenté las herramientas de programación concurrente de Java: Interfaz BlockingQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue. Este artículo es el séptimo artículo de la serie.

BlockingDequeLa interfaz se define de la BlockingQueuemisma manera que la interfaz java.util.concurrenty representa una "cola de dos extremos" segura para subprocesos, que agrega elementos a la cola u obtiene elementos de manera segura para subprocesos. Este artículo llevará a todos a aprender más BlockingDeque.

dequeEs una abreviatura de "Double Ended Queue". Por lo tanto, el significado de "cola de dos extremos" es una cola que puede insertar y eliminar elementos de ambos extremos (la cabeza o la cola de la cola).

Si un subproceso produce y consume elementos de la misma cola, se puede usar una deque BlockingDeque. Si el subproceso de producción debe insertarse en ambos extremos de la cola y el subproceso consumidor debe eliminarse de ambos extremos de la cola, también es posible utilizar solo la BlockingDequecola de dos extremos . Consulte la figura siguiente para comprender

Un hilo produce elementos y los inserta en cualquier extremo de la cola. Si la BlockingDequecorriente está llena, inserte el hilo se bloqueará hasta que el hilo se elimine de la BlockingDequeeliminación de un elemento. Si BlockingDequeactualmente está vacío, el hilo de extracción se bloqueará hasta que el hilo de inserción inserte un elemento en BlockingDequeél.

Método BlockingDeque

BlockingDequeHay 4 métodos diferentes para insertar, eliminar y verificar elementos en la etiqueta. Cada grupo de métodos se comporta de manera diferente cuando la operación requerida no se puede ejecutar inmediatamente. Consulte la tabla de abajo

Jefe de operaciones del equipo Lanzar una excepción Devuelve un valor específico Esperando después de bloquear Esperando tiempo de espera después del bloqueo
Insertar objeto addFirst (o) oferta primero (o) poner primero (o) offerFirst (o, tiempo de espera, unidad de tiempo)
Quitar objeto eliminarPrimero (o) pollFirst () takeFirst () pollFirst (tiempo de espera, unidad de tiempo)
Verificar la existencia del objeto getFirst () peekFirst ()
Operación de cola Lanzar una excepción Devuelve un valor específico Esperando después de bloquear Esperando tiempo de espera después del bloqueo
Insertar objeto addLast (o) ofertaÚltima (o) putLast (o) offerLast (o, tiempo de espera, unidad de tiempo)
Quitar objeto eliminarÚltimo (o) pollLast () takeLast () pollLast (tiempo de espera, unidad de tiempo)
Verificar la existencia del objeto obtener ultimo() peekLast ()

Como puede ver, estos métodos BlockingQueueson algo similares a los métodos y , excepto que xxxFirst y xxxLast se agregan al método, por lo que puede consultar mi artículo anterior para comparar). El significado de los cuatro comportamientos del método anterior es

  1. Lanzar una excepción : si no se puede responder al resultado inmediatamente después de llamar al método (cola vacía o cola llena), se lanzará una excepción.
  2. Devolver valor específico : si no se puede responder al resultado inmediatamente después de llamar al método (cola vacía o cola llena), entonces se devuelve un valor específico (generalmente verdadero / falso), verdadero significa que el método se ejecutó correctamente, de lo contrario significa el método no se ejecuta.
  3. Esperando después del bloqueo : si el método no se puede responder al resultado inmediatamente después de llamar al método (cola vacía o cola llena), el método se bloqueará y se mantendrá en estado de espera.
  4. Esperando el tiempo de espera después del bloqueo : si el método no se puede responder al resultado inmediatamente (cola vacía o cola llena) después de llamar al método, el método se bloqueará esperando un cierto período de tiempo, es decir, bloqueado dentro del período de tiempo de espera. Cuando expira el período de tiempo de espera, el hilo del método ya no se bloqueará, sino que devolverá un valor específico (generalmente verdadero / falso), verdadero significa que el método se ejecuta correctamente, de lo contrario significa que el método no se ejecuta.

BlockingDeque 继承 BlockingQueue

La interfaz BlockingDeque hereda la interfaz BlockingQueue. Esto significa que puede usar BlockingDeque como BlockingQueue. Si hace esto, los diversos métodos de inserción agregarán el elemento al final de la deque, y el método de eliminación eliminará el elemento del encabezado de la deque. Los métodos de inserción y eliminación de la interfaz BlockingQueue hacen precisamente eso.

La siguiente es una tabla de comparación de la función del método BlockingQueue en la implementación de BlockingDeque

BlockingQueue BlockingDeque
agregar() addLast ()
oferta() offerLast ()
poner() putLast ()
retirar() removeFirst ()
encuesta pollFirst ()
llevar() takeFirst ()
elemento() getFirst ()
ojeada() peekFirst ()

Clase de implementación de la interfaz BlockingDeque

BlockingDequeEs una interfaz, por lo que cuando realmente la instanciamos, necesitamos usar su clase de implementación de interfaz. java.util.concurrentLos LinkedBlockingDequemétodos del paquete implementan la BlockingDequeinterfaz.

Su método de uso es BlockingQueuesimilar al del mismo, por lo que aquí solo se ofrece una breve introducción.

//初始化一个LinkedBlockingDeque
BlockingDeque<String> deque = new LinkedBlockingDeque<String>();

deque.addFirst("1");//向队首添加元素
deque.addLast("2"); //向队尾添加元素

String two = deque.takeLast(); //从队尾获取元素
String one = deque.takeFirst(); //从队首获取元素

Bienvenido a seguir mi blog, hay muchas colecciones boutique.

  • Este artículo se reproduce con una indicación de la fuente (se debe adjuntar la conexión y el texto no se puede reproducir únicamente): Blog de Letter Brother .

Si crees que es útil para ti, ¡dale me gusta y compártelo! ¡Tu apoyo es mi inagotable motivación creativa! . Además, el autor ha publicado el siguiente contenido de alta calidad recientemente y espero su atención.

Supongo que te gusta

Origin blog.csdn.net/hanxiaotongtong/article/details/115291864
Recomendado
Clasificación