Java Reference
In-Depth Information
bus.sendForNothing("hallo");
bus.sendForNothing(1, "hallo");
bus.sendForNothing("hallo", 2);
Wie an der Ausgabe des Programms abgelesen werden kann, wird durch den ersten Aufruf
die erste Variante der Methode m, durch den zweiten Aufruf die zweite und durch den drit-
ten Aufruf die dritte Variante angesprochen.
Bei dem folgenden Aufruf ändert sich die Situation jedoch:
bus.sendForNothing(1);
Zu dem Argument des Typs int gibt es zwei passende Methoden, nämlich m1 und m2. Die
Ausgabe des Programms zeigt, dass auch in diesem Fall die beiden Methoden m1 und m2
parallel ausgeführt werden. Der Unterschied zur ersten Anwendung ist jetzt aber der, dass
beide Methoden auf dasselbe Objekt angewendet werden. Für unsere Beispielklasse ist das
kein Problem, da es nichts zu synchronisieren gibt. Würde man die beiden Methoden m1
und m2 zu Probezwecken aber trotzdem synchronized machen, würde man einen Unter-
schied bei der Ausgabe sehen (ohne synchronized: „Beginn Beginn Ende Ende“, mit syn-
chronized „Beginn Ende Beginn Ende“). Da in den beiden parallel ausgeführten Methoden-
aufrufen der Counter aufgerufen wird, wird somit also auch das Counter-Objekt parallel
genutzt. Für genau diesen Fall wurde die Methode increment in Listing 15.1 schon synchro-
nized gesetzt. Übrigens konnte ich bei mehreren Ausführungsversuchen ohne synchro-
nized tatsächlich einmal sehen, dass die beiden parallel ausgeführten Aufrufe denselben
Wert zurückgeliefert haben, was nicht vorkommen sollte. Die Synchronisation von incre-
ment ist in diesem Fall also zwingend notwendig.
Wenn man über den Request-Response-Bus nicht beide Methoden m1 und m2, die densel-
ben Parametersatz haben, aufrufen möchte, gibt es in diesem Fall die Möglichkeit, über den
Rückgabetyp, der bei beiden Methoden unterschiedlich ist, zu diff erenzieren. Durch den
folgenden Aufruf wird nur m1 aufgerufen, da m1 den Rückgabetyp void hat:
bus.sendForSingleOfClass(void.class, 2);
Eine andere Form der Diff erenzierung kann in diesem Fall über den Hint-String erfolgen,
der ebenfalls für beide Methoden unterschiedlich ist. Nur die Methode m2 kann zum Bei-
spiel so aktiviert werden:
bus.sendForSingleWithHint("m2", 3);
Diese Variante des Sendens sendForSingleWithHint ist auch einfacher über die Methode
send verfügbar, die in der ersten Anwendung benutzt wurde:
bus.send("m2", 3);
Man kann auch sowohl den Hint-String als auch den Rückgabetyp angeben. Auch auf diese
Weise wird nur m1 aufgerufen:
bus.sendForSingleOfClassWithHint(void.class, "m1", 4);
Wenn beim Senden etwas spezifi ziert wird, wofür keine passende Methode gefunden wird,
so hat der Sendeaufruf keine Wirkung. Dies ist beim folgenden Aufruf der Fall:
bus.sendForSingleOfClassWithHint(int.class, "m1", 4);
 
Search WWH ::




Custom Search