Powiedzmy mam zsynchronizowany sposób na jakiejś klasy:nadrzędnym zsynchronizowanych metod w Javie
abstract class Foo {
public synchronized void foo() { // synchronized!
// ...
};
}
i overrode go bez pomocą zsynchronizowane modyfikator:
class Bar extends Foo {
@Override
public void foo() { // NOT synchronized!
super.foo();
// ...
}
}
Mam parę szczegółowe pytanie dotyczące tego scenariusza:
- Czy zastąpiona metoda b e także niejawnie zsynchronizowane?
- Jeśli nie, czy będzie można zsynchronizować telefon
super
? - Jeśli nie ma numeru
super
, czy wszystko zostanie zsynchronizowane? - Czy istnieje sposób na wymuszenie stosowania metody nadpisującej w celu użycia
synchronized
(zauważyłem, że abstrakcyjne definicje metod lub definicje metod w interfejsie nie zezwalają na synchronizowane słowo kluczowe)?
Zobacz 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 Synchronizacja nie jest częścią sygnatury metody, ale częścią implementacji metody. – flup