在构建一个多线程程序时,我遇到了一个问题:ConcurrentLinkedDeque的remove方法被两个线程调用,导致抛出异常。我可以通过在代码中同步此方法来解决问题,但我正在寻找一种不需要同步的解决方案。我搜索了其他适合的数据结构,但没有找到任何不会抛出异常或等待队列再次填充的选项。
public void releaseVehicle(DeliveryVehicle vehicle) {
acquireTable.put(vehicle.getLicense(), true);
synchronized (futureQueue) {
if (!futureQueue.isEmpty())
futureQueue.remove().resolve(vehicle);
}
}
我很好奇,是否还有其他方法?