如果仅同步写入,Java 布尔线程是否安全

问题描述 投票:0回答:1

在实例变量布尔线程上进行同步写入的类是否安全?例如:

boolean foo = true;

public synchronized void setFoo(boolean foo) {
  this.foo = foo;
}

public boolean getFoo() {
  return foo;
}
java thread-safety
1个回答
0
投票

如果你的程序只需要保证同步写入,不关心读取的一致性,那么当前的实现可以认为是线程安全的。

如果还需要一致读取,您有两种选择:

  • 同步
    getFoo
    方法:这可以确保读取和写入都是互斥的,保证一个线程始终读取另一个线程写入的最新值。 使用
    volatile
    关键字:将
    foo
    声明为
    volatile
    可确保对
    foo
    的更改对所有线程立即可见。然而,与同步相比,
    volatile
    提供的保证较弱。它不会阻止编译器对指令重新排序,这可能会导致复杂场景中的微妙问题。
© www.soinside.com 2019 - 2024. All rights reserved.