为什么ArrayBlockingQueue不使用LinkedBlockingQueue类似的双锁实现?

本文探讨了ArrayBlockingQueue(ABQ)采用单锁与LinkedBlockingQueue(LBQ)的双锁设计的区别,解释了ABQ为何选择单锁并揭示了LBQ性能优势。理解两者数据结构对并发性能的影响,适合深入了解队列并发控制。
摘要由CSDN通过智能技术生成

从搜索的帖子来看,ABQ完全可以用双锁来实现,并且性能也得到了提升。
但是也有国外道友说:

因为ArrayBlockingQueue使用简单得多的数据结构来保存队列项。ArrayBlockingQueue将其数据存储在一个私有的final E []数组项中。为了使多个线程能够处理相同的存储空间,无论是添加还是出队,它们都必须使用相同的锁。 这不仅是因为内存屏障,还因为互斥保护,因为它们正在修改同一数组。 而LinkedBlockingQueue是队列元素的链表集合,它与ABQ完全不同,并具有双重锁定的能力。 队列中元素的内部存储启用了不同的锁配置。

性能上,双锁LBQ优越于单锁ABQ

LBQ的两把锁,分别控制出队和入队,所以,可以同时有两个线程进行操作链表,一进一出。
ABQ只有一把锁,所以,入队和出队同时只能发生一个。

我想大哥李就是因为考虑到两种数据结构实现的队列方式,所以,LBQ用两把锁,而ABQ用一把锁。
也可以由此推理出,数组用两把锁进行一进一出的操作时,会出现并发问题。

从国外道友的考虑方向看
ABQ用单锁的本质原因是实现队列的数据结构不同,它用数组实现队列的。

参考:https://blog.csdn.net/icepigeon314/article/details/93792519

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值