ArrayBlockingQueue为啥不和LinkedBlockingQueue使用读写两把锁?

ArrayBlockingQueue:

LinkedBlockingQueue:

首先使用读写两把锁,读线程和写线程在锁的范围互不影响,性能更新,那为啥ArrayBlockingQueue为啥不使用两把锁暱?

没有官方解释。

ArrayBlockingQueue可以使用两把锁,并且性能也会更好。

但是

1.LinkedBlockingQueue是由链表组成操作的分别是头尾节点,相互竞争的关系较小。而ArrayBlockingQueue是数组,添加和删除都是在同一个数组上,虽然也可以用两个锁但是实现上需要更多的控制。

2.LinkedBlockingQueue添加元素时有一个构造节点的时间(写的时候耗时较高,影响读),为了尽量减少这部分时间占比,使用一个读锁一个写锁可以实现并发存取的优化(这也正是读写锁的优势)。而ArrayBlockingQueue在添加元素时不需要开辟空间等等(创建时指定数组大小)。

 

 

1、并发队列 – 有界阻塞队列 ArrayBlockingQueue 原理探究

2、解读 Java 并发队列 BlockingQueue

3、并发队列:无界阻塞队列 LinkedBlockingQueue 原理探究

4、面试侃集合: LinkedBlockingQueue

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章