java静态同步方法

Tan*_*eja 3 java static multithreading synchronized

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

das*_*ght 6

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

class Foo {
    private static synchronized doSomething() {
        // Synchronized code
    }
}
Run Code Online (Sandbox Code Playgroud)

是写这个的快捷方式:

class Foo {
    private static doSomething() {
        synchronized(Foo.class) {
            // Synchronized code
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


yai*_*air 6

有可能的.

线程锁定Class类的对象,如on MyClass.class.

JLS,第8.4.3.6节.同步方法:

8.4.3.6.同步方法

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

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