Java 在另一个类对象上同步

时间:2021-01-08 06:09:51

标签: java synchronization

我正在学习 Java 中的 synchronized 关键字,但我没有找到像这样使用它的示例:如果我在另一个类对象上同步会发生什么

public class ClassA {
  public static void hello() {
    synchronized(ClassB.class) {
      // do something
    }
  }
}

2 个答案:

答案 0 :(得分:1)

我可能不对。但是,据我所知,如果你只使用这个类对象一次,它不会改变任何东西。如果您添加另一种方法并使用

synchronized(ClassB.class) {
      // do something
}

再次在第二种方法中,您将能够一次访问 synchronized 结构中的一个代码片段,因为您将使用此类对象来确保同步并且不允许同时访问.

答案 1 :(得分:1)

java 中的每个对象都有一个头部,其中包含一些元信息字段。这些字段之一是监视器、锁定计数器。当您进入受保护(同步)部分时,监视器的计数器会增加。如果另一个线程尝试完成您的同步部分并发现监视器的计数器 != 0,则该线程将锁定,直到计数器不再 = 0。 您想要用于同步的对象的监视器(或类监视器,如果您的方法是静态的)是您的选择。您应该了解您想要的锁定顺序。

另外你应该明白,如果你使用 ClassB 来同步 ClassA 的方法,那么什么时候会在 ClassA 的帮助下同步运行 ClassB 的监视器,ClassB 中的所有同步方法都将等待(如果它们将通过 synchronized(ClassB.class) 进行同步) .

相关问题