das*_*der 2 java concurrency multithreading
1 if (!vector.contains(element))
2 vector.add(element);
Run Code Online (Sandbox Code Playgroud)
上面的代码不是线程安全的,因为种族条件或复合动作发生在向量中.
我不知道它是怎么发生的
如果一个线程进入第1行并获得一个锁并持有该锁,那么没有其他线程可以获得锁并调用第2行所以哪里是竞争条件
我的理解是正确的还是我错过了一些观点?请详细说明
小智 6
向量是线程安全的,因为它的方法是线程安全的.你有两个单独的矢量调用.这意味着竞争条件存在问题.
要解决此问题,您需要同步对向量的调用.如果这是调用完成的唯一区域
synchronized(vector) {
if(!vector.contains(element))
vector.add(element);
}
Run Code Online (Sandbox Code Playgroud)