我想知道是否可以使用数组来实现LinkedBlockingQueue
之类的两锁算法。
我得到一些答案
LinkedBlockingQueue
take()
和put()
方法处理单独的节点(首尾),因此它可以使用两个锁,但是ArrayBlockingQueue
使用公共数组({{1} }),items[]
和take()
方法必须处理同一数组(put()
),因此存在并发问题,必须使用一个锁。
我对此答案表示怀疑,因为我认为在数组队列中,items[]
和take()
方法可以处理不同的索引,它也可以实现使用双锁算法。
所以我只实现了put()
和DoubleLockArrayBlockingQueue
方法,但是我不知道它是否可以按预期工作。
take()
我可以运行此代码,但是很难证明它在多个线程下都能按预期工作。有人可以提供关于正确与否的建议吗?或某种方法来证明这一点?