java静态同步方法

当两个线程同时使用不同的实例调用静态同步方法时会发生什么? 可能吗? 对象锁用于非静态同步方法,但是什么类型的锁用于静态同步方法?

它与实现该方法的Class对象上的同步相同,所以是的,它是可能的,并且是的,该机制有效地忽略了调用该方法的实例:

 class Foo { private static synchronized doSomething() { // Synchronized code } } 

是写这个的快捷方式:

 class Foo { private static doSomething() { synchronized(Foo.class) { // Synchronized code } } } 

有可能的。

线程锁定Class对象,就像在MyClass.class

见JLS,第8.4.3.6节。 同步方法 :

8.4.3.6。 同步方法

同步方法在执行之前获取监视器(第17.1节)。

对于类(静态)方法,使用与方法类的Class对象关联的监视器。

静态同步方法在java.lang.Class类型的实例上使用锁。 也就是说,每个可访问类在运行时由类型为Class的对象表示,该对象由静态同步方法使用。

使用静态锁定时,将忽略对象。 锁是在类而不是对象上获取的。