【发布时间】:2009-12-13 18:10:22
【问题描述】:
如果我有一个 volatile 布尔值(我们称之为有效),那么下面这段代码在 Java 中是线程安全的吗?
if (valid)
return;
valid = true;
或者,我是否需要同步,因为仅当它为假时才将有效设置为真(因此有效的集合取决于其当前值)?
【问题讨论】:
-
Volatile 不能解决竞争条件。 Volatile 解决了存储在“valid”中的值被共享给所有其他线程有权访问valid的问题。因此,如果“valid”不是静态的,并且没有对包含“valid”的对象的静态引用,那么其他线程将不会知道“valid”。
标签: java synchronization volatile