即使在isEmpty检查之后也是NoSuchElementException

时间:2014-09-14 04:03:01

标签: java exception linked-list queue nosuchelementexception

我在Java中使用LinkedList并将其定义为:

private final Queue<Collection<String>> data = new LinkedList<Collection<String>>();

当我尝试访问它时会出现问题,如下面的代码所示:

synchronized (data) {
    if (data.isEmpty()) 
    {
        return;
    }
    data.remove();
}

在大多数情况下这很有效。但在一些罕见的未知场景下,它会抛出异常

java.util.NoSuchElementException

抛出异常
data.remove();

根据我的理解,如果在空的队列上尝试删除,则抛出上述异常。 但在尝试isEmpty()之前,我已经检查了remove()。 那为什么会抛出这样的例外呢? 我已经看过很多类似的帖子,但无法得到令人信服的答案。由于队列中有synchronized,我只是不明白这个原因。

非常感谢任何帮助。

0 个答案:

没有答案