あるクラスに同期メソッドがあるとしましょう:
abstract class Foo {
public synchronized void foo() { // synchronized!
// ...
};
}
同期修飾子を使用せずにオーバーライドしました:
class Bar extends Foo {
@Override
public void foo() { // NOT synchronized!
super.foo();
// ...
}
}
このシナリオに関して、具体的な質問がいくつかあります。
- オーバーライドされたメソッドも暗黙的に同期されますか?
- そうでない場合、
super
呼び出しは同期されますか? - -callがない場合
super
、何かが同期されますか? - オーバーライド メソッドを強制的に使用する方法はあります
synchronized
か (インターフェイス内の抽象メソッド定義またはメソッド定義では、synchronized キーワードが許可されていないことに気付きました)。