1 if (!vector.contains(element))
2 vector.add(element);
上面的代码不是线程安全的,因为竞争条件或复合 Action 发生在vector中。
我不知道怎么回事
如果一个线程进入第1行并获得一个锁并持有该锁,则没有其他线程可以获取该锁并调用第2行,因此竞争条件在哪里
我的理解正确吗?还是我错过了一点?
请详细解释
最佳答案
vector 是线程安全的,从某种意义上说,它的方法是线程安全的。您所拥有的是对vector的两个单独调用。这意味着存在竞赛条件问题。
要解决此问题,您需要将调用同步到 bootstrap 。如果这是唯一可以完成通话的区域,例如
synchronized(vector) {
if(!vector.contains(element))
vector.add(element);
}
关于java - Vector中的竞赛条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22109357/