Java - 如何避免使用ConcurrentLinkedDeque时出现NoSuchElementException异常

3

在构建一个多线程程序时,我遇到了一个问题:ConcurrentLinkedDeque的remove方法被两个线程调用,导致抛出异常。我可以通过在代码中同步此方法来解决问题,但我正在寻找一种不需要同步的解决方案。我搜索了其他适合的数据结构,但没有找到任何不会抛出异常或等待队列再次填充的选项。

    public void releaseVehicle(DeliveryVehicle vehicle) {
    acquireTable.put(vehicle.getLicense(), true);
    synchronized (futureQueue) {
        if (!futureQueue.isEmpty())
            futureQueue.remove().resolve(vehicle);    

    }
}     

我很好奇,是否还有其他方法?
1个回答

3
您可以使用poll。由于ConcurrentLinkedDeque不允许null元素,所以poll返回null表示双向队列为空(在调用时)。
SomeClass element;
while ((element = deque.poll()) != null) {
    // do something with element
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接