java - 在 "reference"或实例上同步

标签 java synchronization

考虑以下代码:

public class Foo {
  private static final Object LOCK = new Object();
  private Object _lockRef1 = LOCK;
  private Object _lockRef2 = LOCK;
  private int _indx = 0;

  public void dec() {
    synchronized(_lockRef1) {
      _indx--;
    }
  }

  public void inc() {
    synchronized(_lockRef2) {
      _indx++;
    }
  }
}

调用方法 dec()inc() 是线程安全的吗?一方面,这些方法在两个不同的实例 _lockRef1 和 _lockRef2 上同步。另一方面,这些实例“指向”同一个对象 LOCK...

最佳答案

它们不是“在两个不同的实例上同步”——仅仅因为您使用两个不同的变量并不意味着有两个不同的实例。您有几个变量,每个变量都具有相同的值 - 对 java.lang.Object 的单个实例的引用。

所以是的,这是线程安全的。当然,就可读性而言,您不应该编写这样的代码,但假设您只是想了解发生了什么,这很好。

关于java - 在 "reference"或实例上同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1900384/

相关文章:

java - 为简单的伪代码语言创建解析器?

networking - 无需 NTP 的小尺寸时钟同步

java - 实现跨机器同步的良好设计是什么?

c# - C#中两个进程之间的同步。?

java - java中的for-each循环不能用于赋值

java - 如何使用 Java 从地址获取值?

java - 想要将 Android 设备应用程序(Java 编程)连接到 NetBeans 8.0

java - 无法将 YouTube 集成到 Fragment

c# - 这是一个正确的互锁同步设计吗?

iphone - 等待 iOS 中的多个事件?