比方說,我有一個synchronized方法上的一些類:重寫在Java中
abstract class Foo {
public synchronized void foo() { // synchronized!
// ...
};
}
,我使用synchronized修飾符推翻它沒有:
class Bar extends Foo {
@Override
public void foo() { // NOT synchronized!
super.foo();
// ...
}
}
我有幾個關於此場景的具體問題:
- 重寫的方法b e也隱含地同步了?
- 如果不是,那麼
super
-呼叫將會同步嗎? - 如果沒有
super
-call,什麼都會被同步? - 有沒有辦法強制重寫方法使用(我注意到抽象方法定義或接口內的方法定義不允許synchronized關鍵字)?
參見http://stackoverflow.com/questions/12684850/how-can-i-ensure-that-an-重寫方法同步 – rgettman 2013-03-12 23:57:32
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4294756同步不是方法簽名的一部分,而是方法實現的一部分。 – flup 2013-03-13 00:01:04