java - 我可以使用同步到最终字段吗?

标签 java final synchronize

考虑下面的代码,我想让它成为一个线程安全的类,这样它就永远不会得到奇数:

class Test {
  private int value = 0;
  private final Object lock;

  public void add() {
    synchronized (lock) {
      value++;
      value++;
    }
  }

  public int getValue() {
    synchronized (lock) {
      return value;
    }
  } 
}

我现在很怀疑lock字段,声明为final,这有关系吗?或者它会破坏线程安全?

我觉得如果lock字段没有声明为final,这应该是一个线程安全的类。如果这个结论有误,请指正,谢谢。

最佳答案

I am now doubt of the lock field, which is declared to be final, will this matter?

是的,锁定final 字段对象被认为是最佳实践。

如果可以更改引用,则可以更改锁定的对象,从而破坏线程安全。

关于java - 我可以使用同步到最终字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11478011/

相关文章:

c# - 将多个数据表链接到同一个数据库表

java - 如何在Java中为多个用户实现多问题轮询线程?

java - 如何使用 WebDriver 移动光标位置

java - YCSB JDBS 驱动程序 : java. lang.ClassNotFoundException

java - Java 中的 Setter 参数最终

java - 引用对象类型时使用final

iphone - 当我使用 COM 以编程方式同步 iphone 时让 iTunes 通知我

java - 如何在java中创建动态全局变量

java - DecimalFormat 点和逗号作为十进制分隔符

Java:对枚举数组的最终引用是不可变的吗?