使用LinkedBlockingQueue之类的二锁算法来实现ArrayBlockingQueue吗?\

时间:2019-07-02 09:32:24

标签: java

我想知道是否可以使用数组来实现LinkedBlockingQueue之类的两锁算法。

我得到一些答案

  

LinkedBlockingQueue take()put()方法处理单独的节点(首尾),因此它可以使用两个锁,但是ArrayBlockingQueue使用公共数组({{1} }),items[]take()方法必须处理同一数组(put()),因此存在并发问题,必须使用一个锁。

我对此答案表示怀疑,因为我认为在数组队列中,items[]take()方法可以处理不同的索引,它也可以实现使用双锁算法。

所以我只实现了put()DoubleLockArrayBlockingQueue方法,但是我不知道它是否可以按预期工作。

take()

我可以运行此代码,但是很难证明它在多个线程下都能按预期工作。有人可以提供关于正确与否的建议吗?或某种方法来证明这一点?

0 个答案:

没有答案