阻塞式队列-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个元素
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


