Ein Problem aus einer langsam aussterbenden Welt: Wir betrachten ein System mit drei
Rauchern ("smoker") und einem Agenten. Jeder Raucher rollt sich so oft wie möglich eine
Zigarette und raucht diese anschlieflend. Um eine Zigarette rollen und rauchen zu können
benötigt ein Raucher drei Zutaten: Tabak ("tobacco"), Papier ("paper") und Streichhölzer
("matches"). Einer der drei Raucher hat Tabak, ein anderer Papier und der Dritte hat Streich-
hölzer. Der Agent hat eine unendliche Menge von allen drei Dingen. Alle sitzen um einen
Tisch versammelt.
Das Verhalten in diesem System ist folgendermaflen:
1. Der Agent legt zwei der drei Zutaten auf den Tisch (zuf‰llig ausgew‰hlt).
2. Der Raucher, der die fehlende dritte Zutat besitzt, nimmt die beiden Zutaten vom
Tisch, rollt sich eine Zigarette und raucht sie anschlieflend (das kostet Zeit!). Wenn er
mit dem Rauchen fertig ist, signalisiert er dies dem Agenten.
3. Der Agent beginnt wieder einen neuen Zyklus --> Schritt 1.
2.1. Schreiben Sie ein JAVA-Programm, welches das o.g. Systemverhalten mit einem
Agenten-Thread und drei Smoker-Threads simuliert! Benutzen Sie die JAVA-
Synchronisationsmechanismen (Eintritt in einen Objekt-Monitor mittels "synchronize") und
die Methoden zur Threadsynchronisation (wait(), notify(), notifyAll()). Die Si-
mulation soll nach einer vorgegebenen Zeit durch den Aufruf der Methode interrupt()
beendet werden.
2.2. Testen Sie ihr Programm und dokumentieren Sie die erfolgreiche Simulation durch ge-
eignete Testausgaben!