1

我以这种方式创建了一个可运行文件:

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创建为 a LinkedList<Class<?>> _animationScriptStack)不为空,如果不是,我删除第一个元素。但是,有时,我有一个java.util.NoSuchElementException, 在removeFirst()通话中。

有人可以解释我为什么吗?

4

1 回答 1

2

LinkedList不是线程安全的,这可能会导致您的代码出现意外结果。

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

于 2012-09-09T18:44:41.353 回答