构建一个多线程程序我遇到了一个问题: ConcurrentLinkedDeque 的 remove 方法被两个线程调用并抛出异常。我可以按照我在此代码中所做的方式通过同步此方法来解决问题,但我正在寻找没有同步的解决方案。 我搜索了其他合适的结构,但没有找到任何不会抛出异常或等待队列再次被填充的结构。
public void releaseVehicle(DeliveryVehicle vehicle) {
acquireTable.put(vehicle.getLicense(), true);
synchronized (futureQueue) {
if (!futureQueue.isEmpty())
futureQueue.remove().resolve(vehicle);
}
}
我很好奇,还有别的办法吗?
最佳答案
您可以改用poll
。由于 ConcurrentLinkedDeque
不允许 null
元素,poll
返回 null
意味着双端队列是空的(在调用)。
SomeClass element;
while ((element = deque.poll()) != null) {
// do something with element
}
关于Java - 使用 ConcurrentLinkedDeque 避免 NonSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53767756/