我正在浏览ArrayBlockingQueue和LinkedBlockingQueue的源代码.LinkedBlockingQueue有一个putLock和一个takeLock分别用于插入和删除,但ArrayBlockingQueue只使用1个锁.我相信LinkedBlockingQueue是基于简单,快速,实用的非阻塞和阻塞并发队列算法中描述的设计实现的.在本文中,他们提到他们保留一个虚拟节点,以便入队者永远不必访问头部,并且出队员永远不必访问尾部,这避免了死锁情况.我想知道为什么ArrayBlockingQueue没有借用相同的想法而是使用2个锁.