CLQ小结

好久没写文章,小结ConcurrentLinkedQueue做个临时记录,它虽然强大但也有它的问题,网上介绍集合中cas操作的文章很多,这里只写一下个人理解

(1)size方法很慢(与ConcurrentHashMap相似)

(2)remove方法很慢(与大部分Queue相似)

(3)如果remove最后一个节点中的元素,remove后节点不会删除

(4)同理当新增完一个元素之后马上删除,这个节点依然存在,所以要尽量避免这种情况的出现:
offer(a)、remove(a) ;offer(b)、remove(b)

(5)使用迭代器中的删除方法也不会移除节点

(6)迭代器的遍历过程中会移除空节点

(7)poll、peek、contains、size、toArray等方法也会移除空节点,但只移除从第一个空节点到第一个有元素节点之间的空节点

通过cas实现无锁队列有他的代价,个人建议使用ConcurrentLinkedQueue慎用remove方法,不但慢而且内存处理这块与其他Queue并不一样,稍有不慎会有大量废弃节点存在,造成某些时刻的内存泄露,最合适它的场景是只有offer与poll的存在,类似命令模式、task的执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值