2.Queue/Deque

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控制


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值