Threads


Write code to define, instantiate and start new threads using both java.lang.Thread and java.lang.Runnable.

Threads bedeutet, nebenläufige Prozesse, die (quasi) nebeneinander laufen. Jeder Thread ist ein einzelner sequenzieller Weg der Ausführung von Code.
Sie teilen sich die gleichen Speicher, Daten und Objekte.
Es gibt zwei Möglichkeiten, um ein Thread zu erzeugen:
Die Methode run sollte vom Programm niemals direkt aufgerufen werden.
Um einen Thread zu starten, wird immer start aufgerufen. Dadurch wird der neue Thread erzeugt und initialisiert. dadurch wird selbständig run aufgerufen, um den Anwendungscode auszuführen.
Die run()-Methode kann auch direkt aufgerufen werden. Dann ist aber diese Methode eine ganz gewöhnliche Methode und erzeugt kein Thread.
Es ist zu beachten, dass die Methode run() public ist und keinen Rückgabewert hat.

nach oben

Recognize conditions that might prevent a thread from executing.

Es gibt verschiedene Methoden, um die Ausführung des Threads zu verhindern:
nach oben

Write code using synchronized wait, notify and notifyAll to protect against concurrent access problems and to communicate between threads.

Define the interaction among threads and object locks when executing synchronized wait, notify or notifyAll.

Beide Teile sind wieder zusammengesetzt

Hier ist als erstes wichtig zu wissen, dass die Methoden wait(), notify() und notifyAll() nicht aus der Thread-Klasse kommen, sondern von der Objektklasse.
Diese Methoden können nur synchronized aufgerufen werden, d. h. sie können nur aufgerufen werden, wenn das Objekt gesperrt ist.
Threads laufen im gleichen Speicherbereich. Sie haben gemeinsamen Zugriff auf alle Daten und Objekte. Wenn zum Beispiel ein Thread in den gemeinsamen Objekt Daten reinschreibt und ein anderer Thread diese Daten liest, kann es Probleme auftreten, wenn der erste Thread noch nicht fertig war. Deshalb hat jedes Objekt eine Sperre und nur ein einziger Thread kann diese Sperre zur gleichen Zeit besitzen. Wenn ein Objekt mit einer synchronisierten Methode instanziiert wird, erhält diese Methode einen Monitor, sozusagen einen Überwacher. In diesem Monitor wird nur ein Thread überwacht. Alle anderen Threads müssen solange warten, bis dieser Thread die Ausführung beendet hat. Dadurch wird sichergestellt, dass nur ein Thread Zugriff auf die Daten hat. Ein Thread, der die wait()-Methode eines Objekts aufruft, hebt vorübergehend alle Sperren auf, die dieser Thread vergeben hat und dieser Thread wird dann zur Liste der wartenden Threads hinzugefügt und unterbricht seine Ausführung. Wenn ein anderer Thread jezt die notify()-Methode aufruft, dann weckt das Objekt einen der wartenden Threads auf und lässt ihn weiterarbeiten (besser gesagt versetzt den Thread in den ready-Zustand). Wie aus dem Namen zu erkennen ist, weckt die Methode notifyAll() alle wartenden Threads und versetzt sie in den ready-Zustand. Threads, die die Verarbeitung wieder weiterführen möchten, müssen die Sperre des Monitors erneut holen.
Die wait()-Methode sollte in einem try-catch-Block geschrieben werden, weil hier InterruptedException auftreten kann.
Valid XHTML 1.1! Valid CSS!