概述
1.Queue
队列,先进先出(FIFO)结构,继承自Collection接口,与List,Set同一个级别
PriorityQueue
非阻塞队列,本质是最小堆结构,根据自然序(构造方法Compare)排序,自动扩容,小于64 每次扩容2倍+2 (a+a+2),之后每次扩容50%(a+a>>1)
ConcurrentLinkedQueue
非阻塞并发队列,线程安全,使用Unsafe类CAS控制,性能优越。自身维护head和tail2个Node
阻塞队列
* ArrayBlockingQueue :一个由数组支持的有界队列。 * LinkedBlockingQueue :一个链表支持的可选有界队列。 * PriorityBlockingQueue :一个由优先级堆支持的无界优先级队列,是对 PriorityQueue的再次包装. * DelayQueue :一个由优先级堆支持的、基于时间的调度队列。加入需要实现Delayed接口对象,可作为定时器使用 * SynchronousQueue :一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制。
1.非阻塞队列中的几个主要方法:
add(E e):将元素e插入到队列末尾,如果插入成功,则返回true;如果插入失败(即队列已满),则会抛出异常;
remove():移除队首元素,若移除成功,则返回true;如果移除失败(队列为空),则会抛出异常;
offer(E e):将元素e插入到队列末尾,如果插入成功,则返回true;如果插入失败(即队列已满),则返回false;
poll():移除并获取队首元素,若成功,则返回队首元素;否则返回null;
peek():获取队首元素,若成功,则返回队首元素;否则返回null
2.阻塞队列中的几个主要方法:
阻塞队列包括了非阻塞队列中的大部分方法,上面列举的5个方法在阻塞队列中都存在,但是要注意这5个方法在阻塞队列中都进行了同步措施。除此之外,阻塞队列提供了另外4个非常有用的方法:
put(E e)
take()
offer(E e,long timeout, TimeUnit unit)
poll(long timeout, TimeUnit unit)
put方法用来向队尾存入元素,如果队列满,则等待;
take方法用来从队首取元素,如果队列为空,则等待;
offer方法用来向队尾存入元素,如果队列满,则等待一定的时间,当时间期限达到时,如果还没有插入成功,则返回false;否则返回true;
poll方法用来从队首取元素,如果队列空,则等待一定的时间,当时间期限达到时,如果取到,则返回null;否则返回取得的元素;
2.Deque
ArrayDeque
数组双向队列
LinkedBlockingDeque
重入锁实现的阻塞双向队列
ConcurrentLinkedDeque
非阻塞并发双向队列,线程安全,使用Unsafe类CAS控制
转载于:https://juejin.im/post/5bbdfcea5188255c3a2d667d
最后
以上就是过时板栗为你收集整理的2.Queue/Deque的全部内容,希望文章能够帮你解决2.Queue/Deque所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复