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