Zurück zum Inhaltsverzeichnis des Manuskripts verteilte Systeme

Übung 1: Nebenläufigkeit mit Threads

Hintergrund

Es soll ein Telefonbuch nebenläufig abgefragt werden können. Das Telefonbuch ist stark vereinfacht und besteht aus einer zweispaltigen Tabelle der folgenden Form:

Name Nummer =============== Meier 4711 von Ulm 4815 Müller 4711 Meier 4816

Die Tabelle ist in der ersten Normalform, allerdings ist keines der beiden Attribute Schlüssel. Das heißt, dass die Feldwerte nicht eindeutig sein müssen. Zu einem Namen können mehrere Telefonnummern und zu einer Telefonnummer mehrere Namen gehören. Es gehört nicht zur Aufgabenstellung, das Telefonbuch per Programm aufzubauen und zu pflegen. Gehen Sie von einer korrekt aufgebauten Tabelle aus. Die Aufgabe beschränkt sich auf das reine Abfragen dieser Tabelle. Das Abfragen ist so zu gestalten, dass der Benutzer

Außerdem soll der Benutzer bei diesem Dialog das Programm auch beenden können. Gibt der Benutzer nur einen Namen und keine Nummer ein, wie zum Beispiel Meier, dann erhält er alle dazu passenden Zeilen der Tabelle, also im Beispiel

Das Gleiche geschieht, wenn er nur eine Nummer und keinen Namen eingibt. Sucht er z.B. nach 4711, dann bekommt er folgende Zeilen geliefert:

Gibt er jedoch einen Namen und eine Telefonnummer gemeinsam ein, dann wird nebenläufig, also unabhängig voneinander, sowohl nach dem Namen als auch nach der Telefonnummer gesucht. Sucht der Benutzer beispielsweise nach der Kombination Meier und 4711, dann erhält er im obigen Beispiel folgende Trefferzeilen, wobei wegen der Nebenläufigkeit bei der Ausgabe die Reihenfolge nicht vorhersagbar ist:

Es gehört nicht zur Aufgabenstellung, die Ergebnisliste zu bereinigen. Im Gegenteil: Mehrfach gefundene Zeilen sollen auch mehrfach ausgegeben werden.

Präzisierung der Aufgabenstellung

  1. Es ist ein Programm zu erstellen, das die beschriebenen Dialoge ermöglicht. Es bietet dem Benutzer in einer Schleife (Es ist kein Einmal-Dienst!) an,
    Gibt der Benutzer nur einen Namen ein, erzeugt das Programm neben dem main-Thread einen (und nur einen) zusätzlichen Thread, der in dem Telefonverzeichnis nach dem Namen sucht. Gibt er nur eine Nummer ein, wird neben dem main-Thread genau ein zusätzlicher Thread erzeugt, der nach der Nummer sucht. Werden schließlich sowohl ein Name als auch eine Nummer eingegeben, werden zwei zusätzliche Threads erzeugt, von denen nebenläufig einer nach dem Namen und der andere nach der Nummer sucht.

  2. Als Programmiersprache ist Java zu verwenden.

  3. Wie Sie das Telefonbuch realisieren, bleibt Ihnen überlassen. Sie können eine externe Lösung mit einer Datei vorsehen oder eine interne, zum Beispiel mit einer ArrayList.

  4. Im Telefonbuch müssen wenigstens ein Name und eine Nummer mehrfach vorkommen. Wenigstens ein Name muss eine Wortlücke wie bei von Ulm und wenigstens einer einen Umlaut enthalten. Achten Sie bitte auf die korrekte Ausgabe der Umlaute.

  5. Es genügt, die Benutzerschnittstelle einfach zu halten. Wenn Sie wollen, können Sie eine grafische Oberfläche erstellen, notwendig ist es nicht. Es reicht, wenn der Benutzer mit einem Text abgefragt werden kann. Die optische Gestaltung der Ein- und Ausgaben steht nicht im Vordergrund der Aufgabenstellung.

  6. Lassen Sie nicht die Suchthreads, sondern die Benutzerschnittstelle, die Suchergebnisse ausgeben.

  7. Machen Sie Ihr Programm threadsicher, indem Sie Schreibkonflikte entweder vermeiden oder behandeln.


Zurück zum Inhaltsverzeichnis des Manuskripts verteilte Systeme