[JUC] BlockingQueue cola de bloqueo

Descripción general de las colas de bloqueo

inserte la descripción de la imagen aquí
Cuando la cola está vacía, la obtención de elementos de la cola se bloqueará hasta que otro subproceso inserte nuevos elementos en la cola.
Cuando la cola esté llena, la obtención de elementos de la cola se bloqueará hasta que otros subprocesos eliminen uno o más elementos de la cola. elementos.

Clase de implementación BlockingQueue

BlockingQueue es una interfaz cuya interfaz principal incluye Collection Iterable Queue

  1. ArrayBlockingQueue (usado comúnmente) : una cola de bloqueo limitada que consta de una estructura de matriz
  2. LinkedBlockingQueue (usado comúnmente) : una cola de bloqueo limitada compuesta por una lista vinculada, el tamaño predeterminado es el valor entero más grande
  3. DelayQueue : el elemento se puede obtener de la cola solo cuando se agote el tiempo de demora especificado. La cola no tiene límite de tamaño y la inserción nunca se bloqueará.
  4. PriorityBlockingQueue : una cola de bloqueo ilimitada que admite la clasificación por prioridad
  5. SynchronousQueue : una cola de bloqueo que no almacena elementos, es decir, una cola de un solo elemento
  6. LinkedTransferQueue : una cola de bloqueo ilimitada compuesta de listas enlazadas
  7. LinkedBlockingDeque : una cola de bloqueo bidireccional que consta de una lista enlazada

Método común:
inserte la descripción de la imagen aquí
prueba de código:

public class BlockingQueueDemo {
    
    
    public static void main(String[] args) throws InterruptedException {
    
    
        //创建阻塞队列
        BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(blockingQueue.add("A"));
        System.out.println(blockingQueue.add("B"));
        System.out.println(blockingQueue.add("C"));

        //第一组方法  抛出异常 add()  remove()  element()

//        System.out.println(blockingQueue.add("W"));
//        System.out.println(blockingQueue.remove());
//        System.out.println(blockingQueue.remove());
//        System.out.println(blockingQueue.remove());
//        System.out.println(blockingQueue.element());
//        System.out.println(blockingQueue.remove());

        //第二组方法 返回特殊值   offer()  poll()  peek()
//        System.out.println(blockingQueue.offer("www"));
//        System.out.println(blockingQueue.poll());
//        System.out.println(blockingQueue.poll());
//        System.out.println(blockingQueue.poll());
//        System.out.println(blockingQueue.poll());

        //第三组方法  阻塞 put()  take()
//        blockingQueue.put("WW");

//        System.out.println(blockingQueue.take());
//        System.out.println(blockingQueue.take());
//        System.out.println(blockingQueue.take());
//        System.out.println(blockingQueue.take());

        //第四组  阻塞,超时放弃 offer(e, time, unit)  poll(time, unit)
//        blockingQueue.offer("ww",3, TimeUnit.SECONDS);
        //        System.out.println(blockingQueue.offer("www"));
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll(3, TimeUnit.SECONDS));
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44179010/article/details/123386616
Recomendado
Clasificación