Metoda join()
w wielowątkowości Java jest niezbędna, gdy chcemy zaczekać na zakończenie wykonania innego wątku, zanim kontynuować dalszą część programu. Metoda ta pozwala na synchronizację wątków, co jest kluczowe w zapewnieniu spójności danych oraz uniknięciu problemów związanych z równoczesnym dostępem do zasobów.
Przykład użycia metody join()
Załóżmy, że mamy program, w którym główny wątek uruchamia dodatkowy wątek, a następnie musi zaczekać na jego zakończenie przed kontynuacją. Oto jak to możemy osiągnąć za pomocą metody join()
:
// Klasa MyThread rozszerzająca Thread
class MyThread extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
try {
// Symulacja czasochłonnej operacji
Thread.sleep(1000);
System.out.println("Wątek " + Thread.currentThread().getId() + ", iteracja: " + i);
} catch (InterruptedException e) {
// Obsługa przerwania wątku
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
// Tworzenie instancji klasy MyThread
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
// Uruchomienie wątków
t1.start();
t2.start();
try {
// Czekamy na zakończenie obu wątków
t1.join();
t2.join();
} catch (InterruptedException e) {
// Obsługa wyjątku InterruptedException
e.printStackTrace();
}
// Wypisanie komunikatu po zakończeniu wszystkich wątków
System.out.println("Zakończono wykonanie obu wątków");
}
}
Wyjaśnienie kodu
- Klasa
MyThread
: Klasa pochodna odThread
, definiuje działanie wątku w metodzierun()
. Symulacja operacji odbywa się przez uśpienie wątku (Thread.sleep(1000)
), co imituje czasochłonną operację. - Tworzenie i uruchomienie wątków: Tworzymy dwie instancje
MyThread
i uruchamiamy je metodąstart()
. - Czekanie na zakończenie wątków: Metoda
join()
jest wywoływana na obiektacht1
it2
. Dzięki temu główny wątek (wątek, który wykonujemain()
) zaczeka na zakończenie obu tych wątków przed przejściem do wypisania komunikatu końcowego.
Podsumowanie
Metoda join()
jest niezwykle ważna w wielowątkowości, gdyż umożliwia bezpieczne czekanie na zakończenie wątków podrzędnych. Dzięki niej można unikać błędów związanych z równoczesnym dostępem do współdzielonych zasobów oraz zapewnia się, że wszystkie wątki zakończą swoje działanie zanim program przejdzie do kolejnych etapów.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.