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:
- Nowy (New): Wątek został utworzony, ale nie został jeszcze uruchomiony.
- Wykonywalny (Runnable): Wątek jest gotowy do uruchomienia i czeka na przydzielenie czasu procesora.
- Zablokowany (Blocked): Wątek czeka na zwolnienie zasobu zablokowanego przez inny wątek.
- Oczekujący (Waiting): Wątek czeka na inny wątek, aby wykonać określoną akcję.
- Czasowy sen (Timed Waiting): Wątek wykonuje oczekiwanie przez określony czas.
- 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.
