Czym jest metoda join() w wielowątkowości w Javie?

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 od Thread, definiuje działanie wątku w metodzie run(). 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 obiektach t1 i t2. Dzięki temu główny wątek (wątek, który wykonuje main()) 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.

Scroll to Top