05.08.2013 Aufrufe

Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll ... - HSR-Wiki

Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll ... - HSR-Wiki

Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll ... - HSR-Wiki

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Threads 767<br />

Auf schnellen Rechnern sollten Sie die Schleifen in den Threads der Klassen Lauf-<br />

Thread und KauThread mindestens 1000 mal durchlaufen, damit sich die Threads<br />

gegenseitig unterbrechen. Selbstverständlich kann diese Zahl je nach Hardware-<br />

Ausstattung nach oben und unten variieren. Wird die Anzahl der Schleifendurchläufe<br />

in den Threads zu niedrig gewählt, dann werden die einzelnen Threads komplett<br />

abgearbeitet, bevor zum anderen Thread umgeschaltet wird. Ein paralleles Arbeiten<br />

ist somit nicht erkennbar. Sollte die Textausgabe so gross sein, dass sie trotz<br />

Gebrauch der Scrollbalken nicht komplett im Konsolenfenster angezeigt werden<br />

kann, dann geben Sie das Ergebnis seitenweise aus oder leiten es in eine Textdatei<br />

um. Zum Beispiel in Windows:<br />

java CowboyJim | more<br />

oder<br />

java CowboyJim > cowboyJim.txt<br />

Aufgabe 19.3: Synchronisation<br />

Die Problematik der Synchronisation soll anhand dieser Aufgabe näher betrachten<br />

werden.<br />

a) Schreiben Sie eine Klasse Zwischenspeicher, die eine Instanzvariable wert<br />

vom Typ int besitzt und diesen über get- und set-Methoden öffentlich zur Verfügung<br />

stellt.<br />

b) Schreiben Sie eine Klasse ZahlThread, die einen Thread darstellt. Beim<br />

Erzeugen eines Objektes der Klasse ZahlThread wird eine Referenz auf ein<br />

Objekt der Klasse Zwischenspeicher übergeben, die in einem privaten Datenfeld<br />

abgespeichert werden soll. Die Methode run() soll einen zufälligen Wert in<br />

den Zwischenspeicher schreiben, 2 Sekunden warten, diesen Wert erneut aus<br />

dem Zwischenspeicher auslesen und überprüfen ob der gelesene Wert mit dem<br />

geschriebenen übereinstimmt. Weichen die beiden Wert voneinander ab, so soll<br />

eine Meldung ausgegeben werden.<br />

c) Schreiben Sie eine Klasse ZwischenspeicherTest, die in der Methode<br />

main() eine Instanz der Klasse Zwischenspeicher erzeugt. Erzeugen und<br />

starten Sie dann einen Thread der Klasse ZahlThread. Überprüfen Sie, ob dies<br />

fehlerfrei abläuft. Fügen Sie hierzu Kontrollausgaben in der Methode run() ein.<br />

d) Erzeugen Sie nun in der Methode main() mindestens einen weiteren Thread. Es<br />

wird zu fehlerhaften Werten kommen. Wie kann dies unterbunden werden? Erweitern<br />

Sie Ihr Programm so, dass keine fehlerhaften Werte mehr auftreten.<br />

Aufgabe 19.4: Stack-Zugriff mit mehreren Threads<br />

Es soll ein anonymes Paket aus den Dateien<br />

• Test.java,<br />

• Reader.java,<br />

• Writer.java,<br />

• Stack.java<br />

erstellt werden.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!