Cykl życia wątku w Java

W Javie wątki są podstawową jednostką programowania współbieżnego, pozwalając na równoczesne wykonywanie wielu sekcji programu. Rozumienie cyklu życia wątka jest kluczowe do efektywnego zarządzania współbieżnością i unikania problemów takich jak zakleszczenie czy wyścigi. W tej lekcji przyjrzymy się różnym stanom, przez które przechodzi wątek w Javie, oraz jak można zarządzać tymi stanami.

Cykl życia wątka

Wątek w Javie może znajdować się w jednym z kilku stanów:

  1. Nowy (New): Wątek został utworzony, ale nie został jeszcze uruchomiony.
  2. Wykonywalny (Runnable): Wątek jest gotowy do uruchomienia i czeka na przydzielenie czasu procesora.
  3. Zablokowany (Blocked): Wątek czeka na zwolnienie zasobu zablokowanego przez inny wątek.
  4. Oczekujący (Waiting): Wątek czeka na inny wątek, aby wykonać określoną akcję.
  5. Czasowy sen (Timed Waiting): Wątek wykonuje oczekiwanie przez określony czas.
  6. Zakończony (Terminated): Wątek zakończył wykonanie.

Przykład: Zarządzanie stanem wątka w aplikacji

W tym przykładzie utworzymy prostą aplikację z wątkiem, który przechodzi przez różne stany cyklu życia.

ThreadExample.java

// Klasa reprezentująca zadanie wątka
class ThreadTask implements Runnable {
    public void run() {
        // Wątek w stanie Runnable
        goForWaitingState();
        // Symulacja pracy
        try {
            Thread.sleep(1000); // Czasowy sen
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        System.out.println("Zadanie wątka zakończone");
    }

    // Metoda symulująca oczekiwanie
    private void goForWaitingState() {
        synchronized (this) {
            try {
                // Oczekiwanie na powiadomienie
                this.wait(500); // Oczekujący
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    }
}

public class ThreadExample {
    public static void main(String[] args) {
        ThreadTask task = new ThreadTask();
        Thread thread = new Thread(task);
        thread.start(); // Uruchomienie wątka
        synchronized (task) {
            task.notify(); // Powiadomienie oczekującego wątka
        }
    }
}

Podsumowanie

Cykl życia wątka w Javie jest fundamentalnym konceptem, który pozwala na efektywne zarządzanie współbieżnością w aplikacjach. Zrozumienie różnych stanów wątków oraz sposobów ich zmiany jest kluczowe do pisania efektywnych, bezpiecznych i wolnych od błędów aplikacji współbieżnych. W przykładzie pokazaliśmy, jak wątek może być uruchomiony, jak przechodzi do stanu oczekiwania, a następnie kończy swoje działanie, co jest tylko jednym z wielu scenariuszy zarządzania wątkami w Javie.

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