Vorlesungsmitschrieb

Werbung
Mehrfachausführung (Wiederverwendung) von Thread
Ein Thread kann nicht zwei­ oder mehrmals ohne Weiteres gestartet werden.
1
Um einen Thread mehrfach auszuführen, bedarf es eines Executor bzw. ExecutorServices.
2
Synchronisierung/Synchronisation
Es gibt Code­Bereiche z.B. Methoden, die NICHT gleichzeitig von mehreren Threads durchlaufen werden dürfen. z.B. sollte die Methode print() eines Druckerspoolers nur sequenziell und nicht gleichzeitig/parallel durchlaufen werden.
Java gibt uns die Möglichkeit, diese Code­Bereiche vom Multithreading auszuschließen.
Synchronisierung einer ganzen Methode über
Schlüsselwort synchronized (seit Java 1)
Synchronisierung eines Blocks (ein Teil einer
Methode) über Schlüsselwort synchronized (seit
Java 1)
Synchronisierung eines Teils einer Methode über
ein Lock (seit Java 5)
3
Beispiel, weshalb Synchronisierung wichtig ist: Überweisungen auf einer Bank.
Synchronisierte Bereiche
(andernfalls kann es vorkommen,
dass zeitweise die Summe aller
Kontenstände nicht konstant
bleibt.
4
Alternative ab Java 5
5
6
Threads, die aufeinander warten und Daten austauschen
Daten (Berechnungsergebnisse) vom BerechnerThread an den Display-Thread übergeben.
Der Display-Thread wartet mit dem Anzeigen, bis
der Berechner-Thread die Ergebnisse berechnet
und übergeben hat.
Excel-Berechner-Thread
Excel-Display-Thread
Excel-Haupt-Thread
7
wait() und notify() müssen in synchronized Blöcken stehen.
Bei wait() wartet der Thread (hier DisplayThread) bis über
den Monitor ein notify() (hier des BerechnerThreads)
übermittelt wird.
Beide Threads müssen
über ein gemeinsames
Objekt (hier "monitor")
verfügen
8
Gleicher Code, diesmal mit Java 5
Die beiden Threads kommunizieren in Java 5
über Conditions (statt über einen Monitor)
Conditions erlauben ein Date als
Abbruchzeitpunkt zu definieren. Das gibt es
bei Object.wait() nicht.
9
10
Herunterladen