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.
Search WWH ::




Custom Search