如果我有一个易失性布尔值(让我们称之为有效),下面这段代码在Java中是线程安全的吗?
if (valid)
return;
valid = true;
或者,我是否需要同步,因为只有当valid为false时才将其设置为true (因此,valid的集合取决于其当前值)?
发布于 2009-12-13 18:15:29
这需要同步,因为如果一个线程将valid计算为false,然后在赋值之前暂停执行,那么另一个线程也会出现,并将valid检查为false,在将valid设置为true之前,您将有两个线程从这里开始运行代码(这可能不是您想要的)。
发布于 2009-12-13 18:33:06
使用AtomicBoolean。可以同时检查和设置实例。
发布于 2009-12-13 18:11:40
它不是线程安全的。但如果这是整个代码,那就没什么关系了。
https://stackoverflow.com/questions/1897211
复制