异常返回无异常offer添加一个元素当队列已满,不会报异常,返回 false ,如果成功返回 true poll获取队列头节点,并且删除它当队列空时,返回 Null peek单纯获取头节点当队列为空时反馈 NULL阻塞put添加一个元素如果队列已满则阻塞 take返回并删除头元素如果队列为空则阻塞
- 如上面所示主要的八个方法,相对都比较简单,下面我们通过实际代码演示的方式来认识
- 向队列中添加一个元素 。如果队列是有界队列,当队列已满时再添加则抛出异常提示,如下:
BlockingQueue queue = new ArrayBlockingQueue(2);queue.add(1);queue.add(2);queue.add(3);- 上述代码中我们创建了一个阻塞队列容量为2,当我们使用
add向其中添加元素,当添加到第三个时则会抛出异常如下:

文章插图
remove
remove方法是从队列中删除队列的头节点,同时会返回该元素 。当队列中为空时执行remove方法时则会抛出异常,代码如下:
private static void groupRemove() {BlockingQueue queue = new ArrayBlockingQueue(2);queue.add("i-code.online");System.out.println(queue.remove());System.out.println(queue.remove());}- 上述代码中,我们可以看到,我们想队列中添加了一个元素
i-code.online, 之后通过remove方法进行删除,当执行第二次remove时队列内已无元素,则抛出异常 。如下:

文章插图
element
element方法是获取队列的头元素,但是并不是删除该元素,这也是与remove的区别,当队列中没有元素后我们再执行element方法时则会抛出异常,代码如下:
private static void groupElement() {BlockingQueue queue = new ArrayBlockingQueue(2);queue.add("i-code.online");System.out.println(queue.element());System.out.println(queue.element());}private static void groupElement2() {BlockingQueue queue = new ArrayBlockingQueue(2);System.out.println(queue.element());}- 上面两个方法分别演示了在有元素和无元素的情况
element的使用 。在第一个方法中并不会报错,因为首元素一直存在的,第二个方法中因为空的,所以抛出异常,如下结果:

文章插图
无异常类型[offer、poll、peek]offer
offer方法是向队列中添加元素, 同时反馈成功与失败,如果失败则返回false,当队列已满时继续添加则会失败,代码如下:
private static void groupOffer() {BlockingQueue queue = new ArrayBlockingQueue(2);System.out.println(queue.offer("i-code.online"));System.out.println(queue.offer("云栖简码"));System.out.println(queue.offer("AnonyStar"));}- 如上述代码所示,我们向一个容量为2的队列中通过
offer添加元素,当添加第三个时,则会反馈false,如下结果:
truetruefalsepollpoll方法对应上面remove方法,两者的区别就在于是否会在无元素情况下抛出异常,poll方法在无元素时不会抛出异常而是返回null,如下代码:
private static void groupPoll() {BlockingQueue queue = new ArrayBlockingQueue(2);System.out.println(queue.offer("云栖简码")); //添加元素System.out.println(queue.poll()); //取出头元素并且删除System.out.println(queue.poll());}- 上面代码中我们创建一个容量为2的队列,并添加一个元素,之后调用两次
poll方法来获取并删除头节点,发现第二次调用时为null,因为队列中已经为空了,如下:
true云栖简码nullpeekpeek方法与前面的element方法是对应的,获取元素头节点但不删除,与其不同的在于peek方法在空队列下并不会抛出异常,而是返回null,如下:
private static void groupPeek() {BlockingQueue queue = new ArrayBlockingQueue(2);System.out.println(queue.offer(1));System.out.println(queue.peek());System.out.println(queue.peek());}private static void groupPeek2() {BlockingQueue queue = new ArrayBlockingQueue(2);System.out.println(queue.peek());}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Java线上CPU100% 问题排查
- 如何启用 GitHub Pages 中的子域名
- JavaScript,如何在字符串中找到一个字符?
- 支付宝app支付服务端的实现-Java版
- Mysql中你知道几种防止数据重复的方法?
- 有氧舞蹈的减肥方法
- 慢跑2小时的好处
- 马黛茶,阿根廷马黛茶,从茶叶中提取出的粗咖啡有绿色光泽
- 班章村的由来,2014年中茶普洱班章审评
- 职场pua|职场PUA在职场中已随处可见,不知不觉你已是受害者
