ArrayBlockingQueue:
LinkedBlockingQueue:
首先使用读写两把锁,读线程和写线程在锁的范围互不影响,性能更新,那为啥ArrayBlockingQueue为啥不使用两把锁暱?
没有官方解释。
ArrayBlockingQueue可以使用两把锁,并且性能也会更好。
但是
1.LinkedBlockingQueue是由链表组成操作的分别是头尾节点,相互竞争的关系较小。而ArrayBlockingQueue是数组,添加和删除都是在同一个数组上,虽然也可以用两个锁但是实现上需要更多的控制。
2.LinkedBlockingQueue添加元素时有一个构造节点的时间(写的时候耗时较高,影响读),为了尽量减少这部分时间占比,使用一个读锁一个写锁可以实现并发存取的优化(这也正是读写锁的优势)。而ArrayBlockingQueue在添加元素时不需要开辟空间等等(创建时指定数组大小)。
1、并发队列 – 有界阻塞队列 ArrayBlockingQueue 原理探究