假设我在某个类上有一个synchronized方法:
abstract class Foo {
public synchronized void foo() { // synchronized!
// ...
};
}
Run Code Online (Sandbox Code Playgroud)
并且我在不使用synchronized修饰符的情况下覆盖它:
class Bar extends Foo {
@Override
public void foo() { // NOT synchronized!
super.foo();
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
关于这种情况,我有几个具体的问题:
super-call会同步吗?super-call,是否会同步?synchronized(我注意到接口内的抽象方法定义或方法定义不允许使用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?
Run Code Online (Sandbox Code Playgroud)
我如何理解同步模型,我会说是的,确实如此,因为锁/监视器与实例myObject相关联,并且定义方法的位置并不重要.但我是对的吗?如果没有,为什么?如果是的话,你为什么确定,我不是?:-)