同步块相当于静态同步方法?

Ric*_*ket 5 java

如果您有如下方法:

public synchronized void addOne() {
    a++;
}
Run Code Online (Sandbox Code Playgroud)

它等同于以下内容:(如果我错了,请纠正我)

public void addOne() {
    synchronized(this) {
        a++;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是什么相当于以下方法?:

public static synchronized void addOne() {
    a++;
    // (in this case 'a' must be static)
}
Run Code Online (Sandbox Code Playgroud)

什么是同步块,其作用与静态同步方法相同?我理解静态同步方法是在类而不是实例上同步的(因为没有实例),但是它的语法是什么?

Qua*_*ter 11

它等同于锁定类对象.您可以通过编写后跟的类名来获取对类对象的引用.class.所以,像:

synchronized(YourClass.class) {
}
Run Code Online (Sandbox Code Playgroud)

请参阅Java语言规范,第8.4.3.6节synchronized方法:

synchronized方法在执行之前获取锁(第17.1节).对于类(静态)方法,使用与方法类的Class对象关联的锁.对于实例方法,使用与此关联的锁(调用该方法的对象).