【发布时间】:2013-06-13 17:50:50
【问题描述】:
当我们只对变量执行读取操作时,应该使用 Volatile,因为一个线程更新的值将对另一个线程可见,即使前一个线程失去 CPU 并退出同步块。那是对的吗?当需要使用原子行为时,将使用原子原语。例如 -
if (volatileBoolean) {
volatileBoolean = !volatileBoolean;
}
假设 volatileBoolean 的值为真。一个线程检查 volatileBoolean 为真并进入 if 块,第二个线程看到 volatileBoolean 的值为真,也进入 if 块。现在,让我们假设第一个线程将错误值(!volatileBoolean)分配给 volatileBoolean 变量并失去 CPU,因此退出 if 块。第二个线程将 volatileBoolean 视为 false,将其分配回 true。
在这种情况下应该使用 AtomicBoolean 吗?如果是,为什么不能使用同步来处理?
synchronized(this){
if (volatileBoolean) {
volatileBoolean = !volatileBoolean;
}
}
【问题讨论】:
标签: java volatile atomicboolean