【发布时间】:2013-07-06 02:19:55
【问题描述】:
请举这个非常简单的例子:
volatile int globalVar = 1;
我的话题:
if (globalVar > 0) {
globalVar--;
}
现在,我必须决定使变量 volatile 是否足以防止竞争条件并使该线程安全。
我知道递增和递减不是,但我不确定它是否不同,因为前面的条件。
我觉得还是不安全,因为可以按这个顺序执行:
线程 A 检查条件。线程 B 检查条件。 线程 A 递增。线程 B 递增。
我说的对吗?
【问题讨论】:
-
这不是唯一的原因;单独递减不是线程安全的。
-
你需要把
globalVar--想象成线程加载globalVar,从结果中减去1,然后将新值写入globalVar,三个独立的操作。
标签: java multithreading thread-safety race-condition volatile