– Cześć, Amigo! Widzę, że robisz wielkie postępy w poznawaniu wątków.

– To przecież nie było takie trudne.

– To świetnie! Dzisiaj będziesz miał łatwą lekcję, a jej tematem jest metoda join.

Wyobraź sobie następującą sytuację: wątek główny stworzył wątek podrzędny do wykonania jakiegoś zadania. Po pewnym czasie wątek główny potrzebuje wyników pracy wykonanej przez wątek podrzędny. Ale wątek podrzędny jeszcze swojej pracy nie zakończył. Co powinien zrobić wątek główny?

Dobre pytanie. Co powinien zrobić wątek główny?

– Właśnie do tego służy metoda join. Dzięki niej możemy sprawić, że jeden wątek poczeka w czasie, gdy inny będzie kończył swoją pracę:

Kod Opis
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("Jestem " + this.name);
}
}
Klasa, która implementuje interfejs Runnable.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

thread1.join();
}
Wątek główny tworzy wątek podrzędny – thread1.

Później uruchamia go poprzez wywołanie thread1.start();

A następnie czeka, aż zakończy działanie – thread1.join();

Jeden wątek może wywołać metodę join na obiekcie Thread drugiego wątku. W rezultacie, pierwszy wątek (który wywołał metodę) zatrzymuje swoje działanie aż do zakończenia drugiego wątku (w przypadku którego została wywołana metoda join obiektu).

Musimy tutaj rozróżnić dwie rzeczy: mamy wątek (odrębne środowisko wykonywania programu) i mamy też obiekt Thread.

– To wszystko?

– Tak.

– Ale dlaczego musimy stworzyć wątek i od razu potem czekać, aż zostanie on zakończony?

– To może nie być potrzebne od razu. Taka konieczność może nastąpić po jakimś czasie. Po uruchomieniu pierwszego wątku podrzędnego wątek główny może przypisać o wiele więcej zadań do innych wątków (poprzez ich utworzenie i wywołanie metody start). Następnie, gdy nie ma już żadnej pracy do wykonania, musi przetworzyć wyniki pierwszego wątku podrzędnego. Zawsze, gdy musisz poczekać, aż inny wątek zakończy pracę, należy wywołać metodę join.

– Kumam.