homedukeOOP mit Java: Beispiele für Multithreading Prof. Dr. Uwe Schmidt FH Wedel

Beispiele für Multithreading


weiter

Erzeugen von Threads mit Unterklassen von Thread

Eine aus Thread abgeleitete Klasse SimpleThread
weiter
Ein Testprogramm mit zwei Threads
weiter
Ein Testprogramm mit beliebig vielen Threads
weiter
Testläufe
Ein Testlauf von SimpleThread0
 
 
Ein Testlauf von SimpleThread1 mit vier Threads
 
weiter

weiter

Erzeugen von Threads mit dem Runnable interface

Eine mit Runnable implementierte Klasse SimpleRunnable
weiter
Ein Testprogramm mit beliebig vielen Threads
weiter
Testläufe
Ein Testlauf von SimpleRunnable1 mit vier Threads
 
weiter

weiter

Synchronisation

Zwei Threads, die unsynchronisiert auf zwei Variablen zugreifen. Dadurch entstehen falsche Berechnungen.
weiter
Das gleiche Programm ohne künstliche Verzögerung
weiter
Das gleiche Programm mit synchronisiertem Zugriff auf die gemeinsamen Variablen.
weiter
Das gleiche Programm ohne künstliche Verzögerung
weiter
Testläufe
Ein Testlauf des unsynchronisierten Programms
 
ohne Verzögerung
 
Das gleiche Programm mit synchronisiertem Zugriff
 
ohne Verzögerung
weiter
merke
Hier ist nicht sichergestellt, dass alle Werte, die vom Erzeuger gesetzt werden, vom Verbraucher auch abgeholt werden. Nur die Konsistenz der Daten im Puffer ist garantiert.
weiter
Das gleiche Programm mit synchronisiertem Zugriff auf die gemeinsamen Variablen und wait() und notify() zur Sequenzialisierung des Erzeugens und Verarbeitens.
weiter
Testlauf
Ein Testlauf des voll synchronisierten Programms
 
weiter
Die gleichen Threads, nur mit 2 Erzeugern und 2 Verbrauchern. Alle 4 arbeiten auf dem gemeinsamen Puffer.
 
Dies führt zu sehr viel mehr Synchronisationsaktionen, insbesondere kann ein Erzeuger, anstatt eines Verbrauchers, den anderen Erzeuger aus der Warteschlange aufwecken.
 
Die Erzeuger und die Verbraucher sind untereinander nicht synchronisiert, sie können also unabhängig voneinander Werte erzeugen und verarbeiten.
weiter
Testlauf
Ein Testlauf des voll synchronisierten Programms
 
weiter

weiter

Verteilen der Arbeit auf mehrere Threads und auf Beendigung warten

Eine aus Thread abgeleitete Klasse CountPrimes zum Zählen der Primzahlen in einem halb offenen Intervall lb <= i < ub.
weiter
Ein Testprogramm.
weiter
Testläufe
Ein Testlauf von CountPrimes mit 2 Threads
 
 
Einige Testläufe von CountPrimes mit 10 Threads
 
 
weiter

weiter

Threads unterbrechen mit interrupt()

Ein Testprogramm für eine Anwendung mit einem Thread, der unterbrochen wird.
weiter
Die Klasse für den zu unterbrechenden Thread.
weiter
Testlauf
Ein Testlauf
 
weiter

Letzte Änderung: 14.02.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel