非空列表上的NoSuchElementException

时间:2012-09-09 18:34:03

标签: java list exception

我以这种方式创建了一个runnable:

private Runnable _animationScriptRunnable = new Runnable() {
    public void run() {
        synchronized (AnimationManager.this) {
            while (!_stopRunning && !_animationScriptStack.isEmpty()) {
                Class key = _animationScriptStack.removeFirst();
                if (isAnimationExist(key) && isAnimationActivated(key)) {
                    AAnimation animation = _animationsClassTable.get(key);
                    animation.doBeforeAnimation();
                    animation.onAnimationBeginning();
                    do {
                        animation.onAnimation();
                    } while (isAnimationActivated(key) && animation.isAnimationRecurent() && !_stopRunning);
                    animation.onAnimationEnding();
                    animation.doAfterAnimation();
                }
            }
        }
    }
};

正如您所看到的,我在同步块中检查我的堆栈(_animationScriptStack,创建为LinkedList<Class<?>> _animationScriptStack)不是空的,如果不是,我会删除第一个元件。但是,有时候,我在java.util.NoSuchElementException电话上有一个removeFirst()

有人能解释我为什么吗?

1 个答案:

答案 0 :(得分:1)

LinkedList不是线程安全的,可能这会导致代码中产生意外结果。

在这种情况下,当您尝试访问线程中的列表时,需要使用ConcurrentLinkedQueue。请看一下,我想这就是你需要的。