这个问题在这里已经有答案了:
.class的java同步块(4个答案)
昨天关门了。
我正在学习java中的synchronized关键字,但我没有找到这样使用它的示例:如果我在另一个类对象上同步会发生什么
public class ClassA {
public static void hello() {
synchronized(ClassB.class) {
// do something
}
}
}
这个问题在这里已经有答案了:
.class的java同步块(4个答案)
昨天关门了。
我正在学习java中的synchronized关键字,但我没有找到这样使用它的示例:如果我在另一个类对象上同步会发生什么
public class ClassA {
public static void hello() {
synchronized(ClassB.class) {
// do something
}
}
}
2条答案
按热度按时间xv8emn3q1#
我可能不对。但是,据我所知,如果只使用这个类对象一次,它不会改变任何东西。如果添加其他方法并使用
同样在第二个方法中,您将能够访问
synchronized
结构,因为您将使用该类对象来确保同步,并且它将不允许同时访问。ig9co6j12#
java中的每个对象都有一个带有一些元信息字段的头。其中之一是监视器,锁定计数器。当您进入受保护(同步)部分时,监视器的计数器递增。如果另一个线程尝试完成同步部分并将发现监视器的计数器!=0他将被锁定,直到计数器不等于0。您可以选择要用于同步的对象监视器(或类监视器,如果您的方法是静态的)。你应该了解你想要的锁的顺序。
此外,您应该了解,如果您使用classb来同步classa的方法,那么当classa中的帮助classb的监视器将同步运行时,classb中的所有同步方法都将等待(如果它们将通过synchronized(classb.class)进行同步)。