Diciamo che ho un metodo sincronizzato su qualche classe:Sostituzione di metodi sincronizzati in Java
abstract class Foo {
public synchronized void foo() { // synchronized!
// ...
};
}
e mi escludeva che senza utilizzare il modificatore sincronizzato:
class Bar extends Foo {
@Override
public void foo() { // NOT synchronized!
super.foo();
// ...
}
}
Ho un paio di domanda specifica riguardante questo scenario:
- Il metodo di override b E anche implicitamente sincronizzato?
- In caso contrario, è possibile sincronizzare il numero
super
? - Se non è presente la chiamata
super
, verrà sincronizzato qualcosa? - C'è un modo per forzare un metodo di sovrascrittura per utilizzare
synchronized
(ho notato che le definizioni di metodo astratto o le definizioni di metodo all'interno di un'interfaccia non consentono la parola chiave sincronizzata)?
Vedi http://stackoverflow.com/questions/12684850/how-can-i-ensure-that-an- overridden-method-is-synchronized – rgettman
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4294756 Synchronized non fa parte della firma del metodo, ma parte dell'implementazione del metodo. – flup