Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-使用ConcurrentLinkedQue避免非接触异常_Java_Multithreading_Concurrency_Thread Safety - Fatal编程技术网

Java-使用ConcurrentLinkedQue避免非接触异常

Java-使用ConcurrentLinkedQue避免非接触异常,java,multithreading,concurrency,thread-safety,Java,Multithreading,Concurrency,Thread Safety,构建多线程程序时,我遇到了一个问题: ConcurrentLinkedQue的remove方法被两个线程调用并引发异常。我可以通过同步这个方法来解决这个问题,就像我在这段代码中所做的那样,但是我正在寻找一个没有同步的解决方案。 我搜索了其他合适的结构,但没有找到任何不引发异常或不等待队列再次填充的结构 public void releaseVehicle(DeliveryVehicle vehicle) { acquireTable.put(vehicle.getLicense(

构建多线程程序时,我遇到了一个问题: ConcurrentLinkedQue的remove方法被两个线程调用并引发异常。我可以通过同步这个方法来解决这个问题,就像我在这段代码中所做的那样,但是我正在寻找一个没有同步的解决方案。 我搜索了其他合适的结构,但没有找到任何不引发异常或不等待队列再次填充的结构

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

    }
}     

我很好奇,还有别的办法吗?

你可以用
投票来代替。由于
concurrentlinkedeque
不允许
null
元素,因此
poll
返回
null
意味着deque为空(在调用时)

SomeClass element;
while ((element = deque.poll()) != null) {
    // do something with element
}