Java Reference
In-Depth Information
private void thisWindowClosed(WindowEvent evt) {
t.interrupt();
}
Listing 14.15
Aufräumaktion beim Schließen des Frames
Damit wird auch der Thread beim Schließen des Frames beendet.
Wenn Sie die Listings der abgeleiteten Komponente
JBallPanel
aufmerksam lesen, wird
Ihnen an zwei Stellen der Modifier
synchronized
auffallen. Er wird einmal innerhalb der
run
-Methode vor einem einfachen Anweisungsblock und einmal für die gesamte
paint-
Component
-Methode verwendet. Dieser Modifier stellt eine der Gegenmaßnahmen von
Java gegen Probleme bei parallel ablaufenden Anweisungsfolgen dar.
In den beiden betroffenen Bereichen wird auf die gleiche Variable
x
zugegriffen. Es
könnte nun durchaus passieren, dass die
paintComponent
mit dem Zeichnen beginnt,
während
x
den Wert 18 hat. Kurz danach ändert die
run
-Methode
x
auf den Wert 20. Da
paintComponent
zu diesem Zeitpunkt mit dem Zeichnen noch nicht fertig war, würde der
Rest der Zeichnung mit dem Wert
x
=20 fertiggestellt. Wie Sie sich leicht vorstellen kön-
nen, würde dadurch eine verzerrte Zeichnung entstehen. Diesem Fall soll der Modifier
synchronized
vorbeugen.
Mit
synchronized
können Sie sicherstellen, dass die dadurch geschützten Bereiche zu
einem Zeitpunkt nur von einem Thread ausgeführt werden können. Dies gilt aber nur,
wenn Sie für das gleiche Objekt aufgerufen werden sollen. Der erste Thread, der den
Zugriff erhalten hat, setzt dabei eine Sperre, die dafür sorgt, dass der zweite Thread war-
ten muss, bis die Sperre wieder aufgehoben wurde. Sie müssen immer darauf achten,
dass beide (oder auch mehrere) Bereiche, die nicht gleichzeitig bearbeitet werden dür-
fen, mit
synchronized
geschützt sind.
Innerhalb von mit
synchronized
geschützten Anweisungsblöcken können über die von
der Klasse
Object
vererbten Methoden
wait()
und
notify()
bzw.
notifyAll()
Threads
über Sperrzustände kommunizieren, um Konflikte zu lösen. Auf diese Möglichkeiten
soll an dieser Stelle aber nur hingewiesen werden, um für Konfliktsituationen zu sensi-
bilisieren und Lösungsmöglichkeiten anzudeuten.
Mit Threads steht Ihnen ein sehr mächtiges Hilfsmittel zur Verfügung, um Programme
effektiv zu gestalten. Sie haben die Threads jetzt im Zusammenhang mit Animationen
kennengelernt, weil Sie dort oft unvermeidlich sind. Sie können aber auch in vielen
anderen Situationen sehr nützlich oder sogar unabdingbar sein. Denken Sie etwa an
Serverdienste, die gleichzeitig viele Anfragen von Clients bearbeiten sollen. Gerade dort
kann Java sehr viele seiner Qualitäten ausspielen.