Java:超类中的synchronized方法获取与子类中的相同的锁,对吗?

class A {
    public synchronized void myOneMethod() {
        // ...
    }
}

class B extends A {
    public synchronized void myOtherMethod() {
        // ...
    }
}

// ...

B myObject;

// ...

myObject.myOneMethod(); // acquires lock
myObject.myOtherMethod(); // same lock?

我如何理解同步模型,我会说是的,它是,因为lock / monitor与实例myObject相关联,并且在定义方法并不重要.但我是对的吗?如果没有,为什么?如果是的,你为什么确定,我不是? 🙂

是的,你是对的,你也得到了解释.没有什么可添加的.

请注意,如果方法是静态的,那么它们将在不同的对象上进行同步,即它们各自的类(A和B).

编辑:为什么我确定?我不知道,你为什么不确定? 😉 myObject只是一个对象 – 来自A类的myObject属性和来自B类的对象之间没有任何区别.(在技术上你可以使用反射来找出哪些属性是哪个,所以在那里必须有一些区别,但是现在忘记了反思,对于对象的常见操作,没有区别.)

http://stackoverflow.com/questions/625726/java-a-synchronized-method-in-the-superclass-acquires-the-same-lock-as-one-in-t

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Java:超类中的synchronized方法获取与子类中的相同的锁,对吗?