Welche Herausforderungen dies in der Softwartechnik zur Folge hat und wie die auftretenden Probleme gelöst werden können, erfahren Sie in diesem Kapitel.
Unterkapitel:
Jedes Objekt der Klasse Thread
besitzt eine Methode run
, die dann in einem neuen Thread ausgeführt wird, wenn dieser durch Aufruf der Methode start
gestartet wird.
Um Code in der Methode run
unterzubringen, gibt es zwei Möglichkeiten:
Thread
und überschreiben die Methode run
.MyRunnable
), die das Interface Runnable
implementiert und damit verpflichtet ist, eine Methode run
zu besitzen. Beim Instanzieren des Thread-Objekts übergeben wir ihm ein MyRunnable
-Objekt.
Ruft man während der Abarbeitung eines Threads (im folgenden: "Thread 1") die Methode join
eines anderen Threads (im folgenden: "Thread 2") auf, so wartet Thread 1 so lange, bis Thread 2 beendet ist. Erst dann fährt Thread 1 mit der nächsten Anweisung fort.
Wichtiges Detail:
Das "Warten" von Thread 1 geschieht nicht aktiv, indem in einer Wiederholung immer wieder überprüft wird, ob Thread 2 schon beendet ist, sondern passiv, d.h. der für Thread 1 reservierte Prozessorkern steht in dieser Zeit für andere Threads zur Verfügung:
Besitzt ein Interface nur eine einzige Methode, so nennt man es functional interface. Das Interface Runnable
ist ein Beispiel dafür.
An jeder Stelle, an der ein Objekt einer Klasse erwartet wird, die ein functional interface implementiert, kann stattdessen eine Kurzform verwendet werden, die man lambda function nennt. Sie sieht so aus:
(parameter 1, ..., parameter n) -> { Anweisungen }
Lambda functions sind ein Ersatz für die in vielen anderen Programmiersprachen verfügbaren closures, unterscheiden sich aber in einem wesentlichen Punkt von diesen: Wird eine außerhalb der lambda function/closure deklarierte Variable innerhalb der lambda function/closure genutzt, so wird
Bei letzteren kann daher von verschiedenen closures und von außerhalb auf die identische Variable zugegriffen werden, während bei ersteren jede lambda function ihre eigene Kopie der Variable erhält und nur auf diese zugreifen kann.