LinkedBlockingQueue的put,add跟offer的区别
来源:互联网 发布:大宗商品网络交易平台 编辑:程序博客网 时间:2024/05/18 19:40
LinkedBlockingQueue就是其中之一,顾名思义这是一个阻塞的线程安全的队列,底层应该采用链表实现。
看其API的时候发现,添加元素的方法竟然有三个:add,put,offer。
1、add方法:
Inserts the specified element into this queue if it is possible to do so immediately
without violating capacity restrictions, returning true upon success and throwing an
IllegalStateException if no space is currently available. This implementation returns true if offer succeeds, else throws an IllegalStateException.
LinkedBlockingQueue构造的时候若没有指定大小,则默认大小为Integer.MAX_VALUE,当然也可以在构造函数的参数中指定大小。 LinkedBlockingQueue不接受null。
add方法在添加元素的时候,若超出了度列的长度会直接抛出异常:
remove:若队列为空,抛出NoSuchElementException异常。
public static void main(String args[]){ try { LinkedBlockingQueue<String> queue=new LinkedBlockingQueue(2); queue.add("hello"); queue.add("world"); queue.add("yes"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } //运行结果: java.lang.IllegalStateException: Queue full at java.util.AbstractQueue.add(Unknown Source) at com.wjy.test.GrandPather.main(GrandPather.java:12)2、put方法:
Inserts the specified element at the tail of this queue, waiting if necessary for space to become available.对于put方法,若向队尾添加元素的时候发现队列已经满了会发生阻塞一直等待空间,以加入元素。
take:若队列为空,发生阻塞,等待有元素。
public static void main(String args[]){ try { LinkedBlockingQueue<String> queue=new LinkedBlockingQueue(2); queue.put("hello"); queue.put("world"); queue.put("yes"); System.out.println("yes"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } //运行结果: //在queue.put("yes")处发生阻塞 //下面的“yes”无法输出3、offer方法:
Inserts the specified element at the tail of this queue if <span style="font-family: Helvetica, Arial, sans-serif;">it is possible to do so immediately without exceeding the queue's capacity,</span>
returning true upon success and false if this queue is full. When using a capacity-restricted queue,
this method is generally <span style="font-family: Helvetica, Arial, sans-serif;">preferable to method add, which can fail to insert an element only by throwing an exception. </span>offer方法在添加元素时,如果发现队列已满无法添加的话,会直接返回false。
poll: 若队列为空,返回null。
public static void main(String args[]){ try { LinkedBlockingQueue<String> queue=new LinkedBlockingQueue(2); boolean bol1=queue.offer("hello"); boolean bol2=queue.offer("world"); boolean bol3=queue.offer("yes"); System.out.println(queue.toString()); System.out.println(bol1); System.out.println(bol2); System.out.println(bol3); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } //运行结果: [hello, world] true true false
0 0
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的offer与put的区别
- LinkedBlockingQueue的put,add,offer和poll,remove,take的区别
- ArrayBlockingQueue跟LinkedBlockingQueue的区别
- ArrayBlockingQueue跟LinkedBlockingQueue的区别
- ArrayBlockingQueue跟LinkedBlockingQueue的区别
- ArrayBlockingQueue跟LinkedBlockingQueue的区别 (转载)
- params.put和params.add的区别
- IOC和AOP
- API Blueprint
- 如何让PJSIP 支持IPV6
- VOC Segmentation GT图像颜色表生成分析
- HDU 5821 Ball(贪心)
- LinkedBlockingQueue的put,add跟offer的区别
- css选择器——:only-of-type
- 八皇后问题解法(Lua版)
- QTreeWidget学习之拖拽节点后,需要点击两次节点才生效
- ADT下载地址,完整版
- jsp分页总结
- 【1】【匹配】HDU5821 Ball
- Android如何在局域网中发送广播
- Memcache简单使用