„Hallo Amigo! Ich sehe, du machst große Fortschritte beim Thema Threads.“

„Es war eigentlich gar nicht so schwierig.“

Das ist toll! Heute hast du eine einfache Lektion. Das Thema ist die join-Methode.

Stell dir folgende Situation vor: Der Haupt-Thread hat einen untergeordneten Thread erstellt, um eine Aufgabe auszuführen. Die Zeit vergeht, und nun benötigt der Haupt-Thread die Ergebnisse der Arbeit, die vom untergeordneten Thread ausgeführt wird. Aber der untergeordnete Thread hat seine Arbeit noch nicht beendet. Was soll der Haupt-Thread tun?

Gute Frage. Was soll der Haupt-Thread tun?

„Dafür gibt es die join-Methode. Sie gibt uns die Möglichkeit, einen Thread warten zu lassen, während ein anderer Thread seine Arbeit durchführt:“

Code Beschreibung
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Klasse, die das Runnable-Interface implementiert.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

thread1.join();
}
Der Haupt-Thread erstellt einen untergeordneten Thread – thread1.

Dann startet er ihn durch den Aufruf von thread1.start();

Und dann wartet er darauf, dass er abgeschlossen wird – thread1.join();

Ein Thread kann die join-Methode mit dem Thread-Objekt eines zweiten Threads aufrufen. Daraufhin stoppt der erste Thread (der die Methode aufgerufen hat) seine Arbeit, bis der zweite Thread (dessen join-Methode des Objekts aufgerufen wurde) beendet ist.

Wir müssen hier zwischen zwei Dingen unterscheiden: Wir haben einen Thread (eine separate Ausführungsumgebung) und wir haben ein Thread-Objekt.

„Das war‘s?“

„Ja.“

„Aber warum müssen wir einen Thread erstellen und dann sofort warten, bis er fertig ist?“

„Das muss er vielleicht nicht. Es könnte erst nach einiger Zeit sein. Nach dem Start seines ersten untergeordneten Threads kann der Haupt-Thread viele weitere Aufgaben an andere Threads zuweisen (durch deren Erstellung und den Aufruf der start-Methode). Wenn er dann keine Arbeit mehr hat, muss er die Ergebnisse des ersten untergeordneten Threads verarbeiten. Wann immer du auf die Beendigung eines anderen Threads warten musst, musst du die join-Methode aufrufen.“

„Alles klar.“