© APSIS GmbH extern.gif (1249 Byte), Polling, 2008


Übungsaufgaben

zum Kapitel 12.

Kapitel 12.1.1

Übung 12.1: Reimplementieren Sie die Klasse MacDonalds als Applet und testen Sie sie. Zum Beenden der Prozesse müssen Sie das Applet beenden.

Kapitel 12.1.3

Übung 12.2: Verändern Sie Ihr Programm aus der Übung 12.1 so, dass die Ausnahme InterruptedException aus dem Ringpuffer den jeweils rufenden Prozess beendet. Dazu müssen Sie die Klasse Ringpuffer im Sinne des Programms (12.7) verändern und dabei die Ausnahme InterruptedException nach außen reichen. In den Klassen Erzeuger und Verbraucher müssen diese Ausnahmen aufgefangen und behandelt werden.

Damit der unterbrechbare Wartezustand oft genug auftritt, sollten Sie die Größe des Ringpuffers klein wählen und vor notify jeweils eine Zeitverzögerung (sleep) einbauen.

Programmieren Sie nun einen Störprozess, der den MacDonalds-Prozessen Unterbrechungen schickt, und starten Sie ihn als letzten Prozess. Dazu ist es notwendig, die Prozessreferenzen global zu vereinbaren, statt lokal oder anonym:

public class MacDonalds { …
   private static Erzeuger hamburger;
      …
   private static Verbraucher ingrid;
      …

Entfernen Sie die Erzeuger- und Verbrauchermeldungen und geben Sie stattdessen für jedes wait und jede InterruptedException eine meldung aus.

Kapitel 12.2.1

Übung 12.3: Suchen Sie sich eins ihrer Übungsprogramme heraus, das Sie mit av ausgeführt haben. Schreiben Sie nun die erforderliche Applet-Klausel selbst und rufen Sie das Programm direkt mit dem appletviewer auf.


© APSIS GmbH extern.gif (1249 Byte), Polling, 2008