Java 同步方法和锁

Java 同步方法和锁,java,Java,当线程调用同步方法时,它会自动获取该方法对象的内部锁,并在该方法返回时释放该锁。但是当调用静态同步方法时会发生什么情况,因为静态方法与类而不是对象关联?类也是对象。调用同步静态方法时,您将获得类对象的锁。类也是对象。调用synchronized static方法时,会获得类对象上的锁。java中的每个类和接口都有一个关联的对象 对于类名MyClass,可以通过 MyClass.class obj.getClass() 从任何对象obj,您都可以通过 MyClass.class obj.ge

当线程调用同步方法时,它会自动获取该方法对象的内部锁,并在该方法返回时释放该锁。但是当调用静态同步方法时会发生什么情况,因为静态方法与类而不是对象关联?

类也是对象。调用同步静态方法时,您将获得类对象的锁。

类也是对象。调用synchronized static方法时,会获得类对象上的锁。

java中的每个类和接口都有一个关联的对象

对于类名MyClass,可以通过

MyClass.class
obj.getClass()
从任何对象obj,您都可以通过

MyClass.class
obj.getClass()

同步静态方法时,将获得此对象的锁

java中的每个类和接口都有一个关联的对象

对于类名MyClass,可以通过

MyClass.class
obj.getClass()
从任何对象obj,您都可以通过

MyClass.class
obj.getClass()

同步静态方法时,将获得此对象的锁

我想说清楚,这仍然意味着,例如,一个线程执行一个同步的非静态方法,而另一个线程执行同步的静态方法。您不能让两个线程同时执行两个同步的静态方法。

只是想澄清一下,这仍然意味着,例如,一个线程执行同步的非静态方法,而另一个线程执行同步的静态方法。您不能让两个线程同时执行两个同步的静态方法