Java-Logo

Monitore und Synchronisierung

  • Beschreibung
  • Ein Beispiel
  • Kritik an der Programmierung

  • Beschreibung

    Häufig kommt es vor, daß mehrere Threads auf den gleichen Datenbereich zugreifen bzw. ihn ändern (zum Beispiel bei Buchungssätzen). Da die Reihenfolge des Ablaufs der Threads nicht vorhersehbar ist, und sie sogar parallel laufen, können Daten in einen inkonsistenten Zustand gebracht werden.

    Java löst dieses Problem unter Verwendung des Schlüsselwortes synchronized. Deklariert man eine Methode als synchronized-Methode, so ist es Threads verboten, diese Methode aufzurufen, falls diese bereits von einem anderen Thread benutzt wird. Erst nachdem dieser Thread die synchronized-Methode ausgeführt hat, darf einer der anderen Threads die Methode aufrufen. Bei der Synchronisierung ordnet ein sogenannter Monitor jedem Objekt ein zusätzliches Objekt zu und erlaubt immer nur einen bestimmten Objekt den Aufruf der synchronized-Methode.



    Ein Beispiel

    Das folgende Applet demonstriert Ihnen ein Applet, das eine synchronized-Methode implementiert. Es ist das vorherige Beispiel-Applet, mit der Ausnahme, daß immer nur ein Lämpchen leuchtet.
    (Quelltext)

    Hier das Applet:

    Kurzbeschreibung des Applets:




    Kritik an der Programmierung

    Erfahrene C++-Programmierer werden wahrscheinlich, die beiden vorgestellten Applets zusammenbetrachtet, bemängeln, daß die Programme nicht gerade sehr objektorientiert geschrieben ist.

    Besser wäre es zum Beispiel gewesen, für die Klassen Sync und Blinken eine gemeinsame Klasse zu implementieren, die gemeinsamen Methoden und Instanzen-Variablen enthält und danach von ihr Sync und Blinken ableiten. In den gezeigen Beispielen haben wir aber mehrere Klasse, die fast die gleichen Eigenschaften haben. Das heißt, von Wiederverwendbarkeit der Klassen ist nicht zu sprechen.
    Eine weitere Kritik ist, daß (im letzten Beispiel) Objekte der Klasse Zeichen alle Methoden des Applet-Objektes aufrufen können. Dadurch ist das Applet-Objekt beliebig "manipulierbar". In "guten" objektorierten Programmen muß der Programmierer bestimmte Maßnahmen treffen, um solche Mängeln zu beseitigen. Ideallerweise darf nur die eigene Klasse mit Hilfe ihrer eigenen Methoden ihre Attribute bzw. Zustand ändern bzw. muß immer über ihren Zustand informiert sein.

    Hätten wir diesen Weg gewählt, wären die Beipiele aber für unerfahrene Programmierer wahrscheinlich schwerer zu durchschauen. Ebenso haben wir bewußt mit diesen Mängeln die Beispiele geschrieben, um erst auf die typischen Fehler von Programmierer, die zum ersten mal ein objektorientiertes Programm schreiben, weisen zu können. Auch das folgende Beispiel zeigt nur einen ersten Ansatz, ein etwas größeres Applet zu schreiben. Erst im darauf folgenden Beispiel werden wir diese Mängeln beseitigen.


    nächstes Beispiel


    Kapitel I

    Allgemeines über Java

    Kapitel II

    Java-Applets und ihre Funktionsweise



    Kapitel III

    Interessante Links

    Kapitel IV

    Einfürung in Java anhand konkreter Bespiele


    Copyright © Quoc-Thanh Lam & Marco Lauer