ConcurrentLinkedDeque和ConcurrentLinkedQueue

看关键字Concurrent就知道这个两个类是并发类。

ConcurrentLinkedQueue 单向链表结构的无界并发队列。元素操作按照 FIFO (first-in-first-out 先入先出) 的顺序。适合“单生产,多消费”的场景。内存一致性遵循对ConcurrentLinkedQueue的插入操作先行发生于(happen-before)访问或移除操作

ConcurrentLinkedDeque双向链表结构的无界并发队列。与 ConcurrentLinkedQueue 的区别是该阻塞队列同时支持FIFOFILO两种操作方式,即可以从队列的头和尾同时操作(插入/删除)。适合“多生产,多消费”的场景。内存一致性遵循对 ConcurrentLinkedDeque 的插入操作先行发生于(happen-before)访问或移除操作

两者都是从JDK1.7开始加入到J.U.C的行列中。使用CAS实现并发安全!他们的非阻塞算法基本一致,ConcurrentLinkedDeque 只是为双端操作定义了几个可供操作的节点类型。

这里我们介绍ConcurrentLinkedDeque 的常用用法就行,ConcurrentLinkedQueue 的用法类似。

一般说到集合常用的功能无非就是增删查:

增加一个元素:public boolean add(E e) {}

增加一个集合: public boolean addAll(Collection<? extends E> c) {}

删除一个元素: public boolean remove(Object o) {}

获取一个节点元素:peek、peekFirst 、peekLast、getFirst、getLast,都是通过peekFirst 、peekLast实现。

更强大的功能特性:

获取并移除节点: poll、pop、remove、pollFirst、pollLast、removeFirst、removeLast,都是通过pollFirst、pollLast实现。

pollFirst()和pollLast()和 remove(Object o) 比较常用

由于ConcurrentLinkedDeque 是双向队列,你可以随时添加集合到队列中,用pollFirst()和pollLast()来消费队列。从消费速度上肯定要比ConcurrentLinkedQueue 消费的快。


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值