Threads und Synchronization

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,

Ich habe eine kleine Frage zum Thema Threads.

Und zwar habe ich 3 Klassen.
Code:
class SuperKlasse{
aSimpleMethode(){
doSomething();
}
}


class KindKlasse1 extends SuperKlasse{
@Override
aSimpleMethode(){
doSomethingOther();
}
}

class KindKlasse2 extends SuperKlasse{
@Override
aSimpleMethode(){
doSomethingCompletelyOther();
}
}

Desweiteren habe ich noch eine Applikation mit verschiedenen Threads, die entweder die Implementierung von aSimpleMethode() aus KindKlasse1 oder KindKlasse2 aufrufen. Pro JVM sollte allerdings nur eine Implementierung zu einer Zeit aufgerufen werden (KindKlasse1 oder Kindklasse2). Reicht es hierfür aus aSimpleMethode() aus der SuperKlasse zu synchronizen?

Wenn SuperKlasse ein Interface wäre, könnte ich das gewünschte Verhalten auch erzwingen, wenn ich in diesem Interface die Methode synchronize?

Bzw. wenn es anstatt dem Interface eine Abstrakte Klasse mit dieser abstrakten Methode wäre?

Fals nicht gibt es eine andere Möglichkeit?

z.b Alla

Code:
class KindKlasse1 extends SuperKlasse{
@Override 
aSimpleMethode(){
synchronized(aSingeltonObjekt){
doSomethingOhter();
}
}
}

Besten Dank

Gast
 
KindKlasse1 oder Kindklasse2 sind unterschiedliche Klassen,
die entsprechenden Operationen können also nur in unterschiedlichen Objekten laufen,

da sich synchronized standardmäßig erstmal nur auf auf das eigene Objekt bezieht,
können sich dieses Operationen unterschiedlicher Objekte also unmöglich in die Quere kommen
(es sei denn du verwendest andere Mittel, synchronized(aSingeltonObjekt) z.B. )

--------

synchronized wird nicht vererbt, vermute ich stark,
ist doch kinderleicht zu testen, überlasse ich mal dir statt das nun selber zu tun 😉

weitere Vermutungen:
kein synchronized in Interfaces erlaubt, abstract auch nicht

alles testbar 😉
 
synchronized in Interface und abstract ist nicht erlaubt.

Sinn und Zweck der ganzen Geschichte ist es das das doSomething... nur von einem Thread zur Laufzeit ausgeführt wird, da dies eine Methode auf einem Server aufruft und gleichzeitig nur ein Aufruf pro "Client" stattfinden darf.

Mit synchronized und einem Monitor funktioniert das nun aber so wie ich will.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben