队列的相关知识学习
1.队列
队列是一种常用的数据结构之一,一般遵循FIFO原则,即先进先出后进后出原则;
队列Queue有三个分支,分别是双端队列Deque,阻塞队列BlockingQueue,非阻塞队列AbstractQueue;
阻塞队列BlockingQueue接口中,常用的实现类有ArrayBlockingQueue、LinkedBlockingQueue、SynchronizedBlockingQueue(同步队列);
2.阻塞队列
2.1 阻塞队列中的四种API
由于有多种业务场景,和不同的业务需求,可以按照所需自由选取使用哪种API处理队列
2.1.1 会抛除异常
在添加操作和移除操作的时候,如果超出了队列长度,会抛出异常;
2.1.1.1 添加方法add()方法;
在设置好队列长度后,超出队列长度继续添加后会抛IllegalStateException:Queue full;
2.1.1.2 移除方法remove()方法;
在设置好队列长度后,在移除操作的时候,如果移除超过队列长度,会抛NoSuchElementException异常;
2.1.1.3 检索队首元素element()方法;
2.1.2 不抛异常并且有返回值
2.1.2.1 添加操作offer()方法
在设置好队列长度后,如果未超过队列长度,会返回true;如果超出队列长度继续添加,不会抛异常,会返回false,并且丢弃添加的元素;
2.1.2.2 移除操作poll()方法
在设置好队列长度后,如果未超过队列长度,会返回true;如果超出队列长度继续移除,不会抛异常,会返回null;
2.1.2.3 检索队首元素peek()方法;
2.1.3 阻塞队列并且一直等待
2.1.3.1 添加操作put()方法;
在设置好队列长度后,如果未超过队列长度,因为没有返回值,会什么都不返回;如果超过队列长度,会阻塞队列,一直等待有空闲位置;
2.1.3.2 移除操作take();
在设置好队列长度后,如果未超过队列长度,因为没有返回值,会什么都不返回;如果超过队列长度,会阻塞队列,一直等待有空闲位置;
2.1.4 不抛出异常并且有返回值,在操作失败后进行超时等待
2.1.4.1 添加操作offer(需要添加的元素,超时时间,超时时间的单位)方法;
在设置好队列长度后,如果未超过队列长度,会返回true;如果超出队列长度继续添加,不会抛异常,会返回false,并且丢弃添加的元素,并且在所设置的超时时间后自动结束操作;
2.1.4.2 移除操作poll(超时时间,超时时间的单位)方法;
在设置好队列长度后,如果未超过队列长度,会返回true;如果超出队列长度继续移除,不会抛异常,会返回false,并且丢弃添加的元素,并且在所设置的超时时间后自动结束操作;
- 点赞
- 收藏
- 关注作者
评论(0)