这段代码可以有竞争条件吗?

时间:2015-05-14 17:13:22

标签: java multithreading thread-safety

    public static void deleteLast(Vector list) {
    int lastIndex = list.size() - 1;//line 2
    list.remove(lastIndex);         // line 3
}

我知道Vector在java中是线程安全的 但这种情况会发生吗

让我们说在这种情况下有list.size()= 10

线程A调用deleteLast,第2行调用lastIndex = 9.由于某种原因,它停止

线程B调用deleteLast并在第2行lastIndex = 9.it转到第3行,现在列表有9个元素

线程A现在醒来并转到第3行,现在它尝试删除索引9处不存在的对象,我们在这里有一个例外

2 个答案:

答案 0 :(得分:0)

不确定。您已正确识别出竞争状况。

答案 1 :(得分:0)

是的,它可以。您应该使用BlockingQueue而不是List来避免这种情况。