并发队列之ConcurrentLinkedQueue

先简单的介绍一下:在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列(这篇推文将要介绍的队列),一个是以BlockingQueue接口为代表的阻塞队列,无论哪一种都继承自Queue接口。

那么下面将介绍一下高性能的ConcurrentLinkedQueue:它是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQueue。它是一个机遇链接节点的无界线程安全队列,因为是无界的,所以可以一直添加元素。该队列的元素遵循先进先出的原则。头是最先加入的,尾是最近加入的,还要注意的是该队列不允许null元素

ConcurrentLinkedQueue的重要方法:

    add()和offer()都是加入元素的方法(在ConcurrentLinkedQueue中,这两个方法没有任何区别)

    poll()和peek()都是取头元素节点,区别在于前者会删除元素,后者不会

    size()和isEmpty(),如果是判断队列是否还有元素,不建议使用size(),因为这个方法必定要遍历队列,这样的效率不高性能不好。


下面是简单的使用方法:


下面是ConcurrentLinkedQueue的文档说明:

ConcurrentLinkedQueue文档说明:

构造方法摘要
ConcurrentLinkedQueue() 
          创建一个最初为空的 ConcurrentLinkedQueue
ConcurrentLinkedQueue(Collection<? extends E> c) 
          创建一个最初包含给定 collection 元素的 ConcurrentLinkedQueue,按照此 collection 迭代器的遍历顺序来添加元素。


方法摘要
 booleanadd(E e) 
          将指定元素插入此队列的尾部。
 booleancontains(Object o) 
          如果此队列包含指定元素,则返回 true
 booleanisEmpty() 
          如果此队列不包含任何元素,则返回 true
 Iterator<E>iterator() 
          返回在此队列元素上以恰当顺序进行迭代的迭代器。
 booleanoffer(E e) 
          将指定元素插入此队列的尾部。
 Epeek() 
          获取但不移除此队列的头;如果此队列为空,则返回 null
 Epoll() 
          获取并移除此队列的头,如果此队列为空,则返回 null
 booleanremove(Object o) 
          从队列中移除指定元素的单个实例(如果存在)。
 intsize() 
          返回此队列中的元素数量。
 Object[]toArray() 
          返回以恰当顺序包含此队列所有元素的数组。
<T> T[]
toArray(T[] a) 
          返回以恰当顺序包含此队列所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值