【JUC】BlockingQueue阻塞队列

阻塞队列概述

在这里插入图片描述
当队列是空的,从队列获取元素操作将会阻塞,直到其他线程往队列插入新的元素
当队列满了,从队列获取元素的操作将会阻塞,直到其他线程从队列中移除一个或多个元素。

BlockingQueue实现类

BlockingQueue是一个接口,它的父接口包括Collection Iterable Queue

  1. ArrayBlockingQueue (常用) : 由数组结构组成的有界的阻塞队列
  2. LinkedBlockingQueue(常用) : 由链表组成的有界的阻塞队列,默认大小为最大整型值
  3. DelayQueue :只有指定延迟时间到了才能从队列中获取到该元素,队列没有大小限制,往往插入永远不会阻塞
  4. PriorityBlockingQueue : 里面支持优先级排序的无界阻塞队列
  5. SynchronousQueue :不存储元素的阻塞队列,即单个元素的队列
  6. LinkedTransferQueue : 由链表组成的无界的阻塞队列
  7. LinkedBlockingDeque : 由链表组成的双向阻塞队列

常用方法:
在这里插入图片描述
代码测试:

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));
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44179010/article/details/123386616
今日推荐