java - 可变 boolean 值

标签 java synchronization volatile

如果我有一个 volatile boolean 值(我们称之为有效),下面这段代码在 Java 中是线程安全的吗?

if (valid)
  return;
valid = true;

或者,我是否需要同步,因为仅当 valid 为 false 时才将其设置为 true(因此 valid 的设置取决于其当前值)?

最佳答案

这需要同步,因为如果一个线程将 valid 评估为 false,然后在赋值之前暂停执行,然后另一个线程出现并检查 valid 是否为 false,在将 valid 设置为 true 之前,您将有两个线程在运行从这里开始的代码(你可能不想要)。

关于java - 可变 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1897211/

相关文章:

java - Gradle:如何从Eclipse构建路径中排除非 jar

go - 如何跨 goroutines 共享 map

Java - 在另一个线程中使用可变对象引用的首选设计?

multithreading - 我什么时候应该使用可升级锁?

Java 重新排序和不稳定问题

c# - 不同线程访问 MemoryStream

c++ - std::atomic 应该是易变的吗?

java - 使用 Optional.ofNullable 替代三元运算符是一种好习惯吗?

java - Generic Dao 的设计模式,Spring 中的服务层,不使用 Hibernate

java - 无法将 java.lang.String 类型的属性值转换为所需的类型 double