Java Reference
In-Depth Information
Ein ListenerObjectCreator lässt sich auch aus Objekten erzeugen. Im folgenden Programm
(s. Listing 15.3) werden zwei Counter- und drei DoubleCounter-Objekte von der Anwendung
angelegt und dem Konstruktor zur Erzeugung eines ListenerObjectCreators übergeben (es
wird dabei eine andere Klasse als zuvor verwendet). Der Rest des Programms ist exakt
identisch mit dem vorigen.
Listing 15.3 Hauptprogramm der ersten Ereignisbusanwendung (Variante 2)
package javacomp.eventbus.counter;
import org.rribbit.*;
import org.rribbit.creation.*;
public class CounterApp
{
public static void main(String[] args) throws Exception
{
Counter c1 = new Counter();
Counter c2 = new Counter();
DoubleCounter c3 = new DoubleCounter();
DoubleCounter c4 = new DoubleCounter();
DoubleCounter c5 = new DoubleCounter();
ListenerObjectCreator creator =
new ObjectBasedListenerObjectCreator(c1, c2,
c3, c4, c5);
RequestResponseBus bus =
RRiBbitUtil.createRequestResponseBusForLocalUse(creator,
true);
for(int i = 0; i < 10; i++)
{
int value = bus.send("increment");
System.out.println("" + value);
}
}
}
Führt man das Programm aus, kann man sehen, dass jetzt bei jedem Senden fünf Methoden
aufgerufen werden. Auch diese Aufrufe erfolgen alle parallel und dauern zusammen nur
etwa 5 Sekunden. Bitte machen Sie sich dazu klar, dass die Increment-Methoden zwar syn-
chronized sind, dass aber synchronized seine Wirkung in diesem Programm noch gar nicht
entfaltet, weil durch synchronized die gleichzeitige Ausführung der Increment-Methoden
auf demselben Objekt verhindert wird. Hier haben wir aber unterschiedliche Objekte, so
dass die Parallelität an keiner Stelle eingeschränkt wird. Für die Ausgabe des Hauptpro-
gramms gibt es prinzipiell dieselben Möglichkeiten wie zuvor: bei der i-ten Ausgabe wird
entweder der Wert i oder der Wert 2*i ausgegeben. In diesem Fall ist der Wert 2*i vielleicht
etwas wahrscheinlicher, da wir drei DoubleCounter-Objekte, aber nur zwei einfache Coun-
ter-Objekte nutzen.
Durch die Verwendung einer anderen Methode zum Senden kann man sich auch alle Rück-
gabewerte geben lassen. Dies erreicht man durch Ersetzung der For-Schleife in Listing 15.3
durch die folgende Schleife:
for(int i = 0; i < 10; i++)
{
 
Search WWH ::




Custom Search