java在另一个类对象上同步

f0brbegy  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(370)

这个问题在这里已经有答案了

.class的java同步块(4个答案)
昨天关门了。
我正在学习java中的synchronized关键字,但我没有找到这样使用它的示例:如果我在另一个类对象上同步会发生什么

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

xv8emn3q1#

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

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

同样在第二个方法中,您将能够访问 synchronized 结构,因为您将使用该类对象来确保同步,并且它将不允许同时访问。

ig9co6j1

ig9co6j12#

java中的每个对象都有一个带有一些元信息字段的头。其中之一是监视器,锁定计数器。当您进入受保护(同步)部分时,监视器的计数器递增。如果另一个线程尝试完成同步部分并将发现监视器的计数器!=0他将被锁定,直到计数器不等于0。您可以选择要用于同步的对象监视器(或类监视器,如果您的方法是静态的)。你应该了解你想要的锁的顺序。
此外,您应该了解,如果您使用classb来同步classa的方法,那么当classa中的帮助classb的监视器将同步运行时,classb中的所有同步方法都将等待(如果它们将通过synchronized(classb.class)进行同步)。

相关问题