阻塞式队列-BlockingQueue简介说明
下文笔者讲述阻塞式队列的相关简介说明,如下所示
队列的简介说明
队列: 遵循先进先出(FIFO)的原则,队列是一种特殊的线性表 队列也是一种操作受限的表 阻塞式队列: 我们通常将阻塞添加,阻塞删除的队列称之为“阻塞式队列”
阻塞式队列适用场景
阻塞式队列常用于生产者和消费者模型中
ArrayBlockingQueue: 阻塞式顺序队列 是一种BlockingQueue的实现类例:
public static void main(String[] args) throws InterruptedException { //队列创建时--需要指定容量 //容量在指定之后不可变 ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<>(5); //向队列中添加元素 queue.add("java265.com-1"); queue.add("java265.com-2"); queue.add("java265.com-3"); queue.add("java265.com-3"); queue.add("java265.com-4"); //当队列已满,则抛出异常 - IllegalStateException // queue.add("Java爱好者"); // 返回值标记元素是否成功添加到队列里面 // 如果队列已满,则返回false // boolean t = queue.offer("java265.com-1"); // System.out.println(t); // 当队列已满,会产生阻塞 --- 直到这个队列中有元素被取出,才会放开阻塞 // queue.put("java--我的最爱"); // 定时阻塞 // 在3s之内如果有元素被取出,那么元素就会添加到队列中 // 当3s之后队列依然是满的,那么返回false表示添加失败 boolean b = queue.offer("java-queue", 3000, TimeUnit.MILLISECONDS); System.out.println(b); System.out.println(queue); }
LinkedBlockingQueue-阻塞式链式队列
LinkedBlockingQueue: 其底层是使用链表进行数据存储, 初始化时可指定其初始容量,也可以不指定初始容量 当设置容量,则采用指定容量进行存储 当未设置容量时,则采用默认容量Integer.MAX_VALUE -> 231 - 1 即:未指定容量,则可以认为其无限大
PriorityBlockingQueue-具有优先级的阻塞式队列
当不指定容量,默认容量是11 当将元素取出,则会对元素进行自然排序 注意事项: 存储的对象所对应的类必须实现Comparable 并重写compareTo方法
SynchronousQueue-同步队列
只允许存储1个元素
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。