请举这个非常简单的例子:
volatile int globalVar = 1;
我的话题:
if (globalVar > 0) {
globalVar--;
}
现在,我必须决定使变量变为 volatile 是否足以防止竞争条件并使该线程安全。
我知道递增和递减不是,但由于前面的条件,我不确定它是否不同。
我认为它仍然不安全,因为它可以按以下顺序执行:
线程 A 检查条件。线程 B 检查条件。 线程 A 递增。线程 B 递增。
我说得对吗?
最佳答案
你是对的。由于您声明的原因,它不是线程安全的。 volatile
确保两个线程都能看到变量的更新值,但不会保护多行代码。
关于java - Java 中的 volatile 和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531919/