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

SimpleThread
Eine aus Thread abgeleitete Klasse SimpleThread
weiter
SimpleThreadTest0
Ein Testprogramm mit zwei Threads
weiter
SimpleThreadTest1
Ein Testprogramm mit beliebig vielen Threads
weiter
Testläufe
Ein Testlauf von SimpleThread0
 
java SimpleThreadTest0
 
Ein Testlauf von SimpleThread1 mit vier Threads
 
java SimpleThreadTest1 a b c d
weiter
Erzeugen von Threads

weiter

Erzeugen von Threads mit dem Runnable interface

SimpleRunnable
Eine mit Runnable implementierte Klasse SimpleRunnable
weiter
SimpleRunnableTest1
Ein Testprogramm mit beliebig vielen Threads
weiter
Testläufe
Ein Testlauf von SimpleRunnable1 mit vier Threads
 
java SimpleRunnableTest1 a b c d
weiter
Erzeugen von Threads mit Runnable

weiter

Synchronisation

1. SyncTest
Zwei Threads, die unsynchronisiert auf zwei Variablen zugreifen. Dadurch entstehen falsche Berechnungen.
weiter
1a. SyncTest
Das gleiche Programm ohne künstliche Verzögerung
weiter
2. SyncTest
Das gleiche Programm mit synchronisiertem Zugriff auf die gemeinsamen Variablen.
weiter
2a. SyncTest
Das gleiche Programm ohne künstliche Verzögerung
weiter
Testläufe
Ein Testlauf des unsynchronisierten Programms
 
java SyncTest
ohne Verzögerung
java SyncTest
 
Das gleiche Programm mit synchronisiertem Zugriff
 
java SyncTest
ohne Verzögerung
java SyncTest
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
3. SyncTest
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
 
java SyncTest
weiter
4. SyncTest2
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
 
java SyncTest2
weiter
Synchronisation

weiter

Verteilen der Arbeit auf mehrere Threads und auf Beendigung warten

CountPrimes
Eine aus Thread abgeleitete Klasse CountPrimes zum Zählen der Primzahlen in einem halb offenen Intervall lb <= i < ub.
weiter
Test
Ein Testprogramm.
weiter
Testläufe
Ein Testlauf von CountPrimes mit 2 Threads
 
java Test 1 10000 5000
 
Einige Testläufe von CountPrimes mit 10 Threads
 
java Test 1 20000 2000
 
java Test 1 2000000 200000
Thread Methoden
weiter

weiter

Threads unterbrechen mit interrupt()

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

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