Jak sprawdzić, czy wątek został przerwany w Javie?

Sprawdzanie, czy wątek został przerwany, jest kluczowym elementem zarządzania wątkami w aplikacjach wielowątkowych w Javie. Umożliwia to odpowiednie reagowanie na żądania przerwania, które mogą być ważne dla bezpiecznego i kontrolowanego zamykania wątku. Java oferuje dwa główne sposoby na sprawdzenie, czy wątek został przerwany: przez sprawdzenie flagi przerwania wątku oraz przez obsługę wyjątku InterruptedException.

Przykład kodu

Poniżej znajduje się przykład kodu w Javie, który demonstruje oba sposoby sprawdzania, czy wątek został przerwany. Przykład zawiera metodę main, w której uruchamiany jest wątek, oraz metodę run wątku, która wykonuje pewne działanie i regularnie sprawdza, czy wątek nie został przerwany.

public class ThreadInterruptCheck {
    public static void main(String[] args) {
        // Tworzenie nowego wątku
        Thread thread = new Thread(() -> {
            // Początek działania wątku
            System.out.println("Wątek rozpoczął działanie.");
            try {
                for (int i = 0; i < 10; i++) {
                    // Czekaj 1 sekundę
                    Thread.sleep(1000);
                    // Sprawdzenie, czy wątek został przerwany
                    if (Thread.currentThread().isInterrupted()) {
                        System.out.println("Wątek został przerwany, kończymy działanie.");
                        return;
                    }
                    System.out.println("Przetwarzanie " + i);
                }
            } catch (InterruptedException e) {
                // Obsługa wyjątku InterruptedException
                System.out.println("Wątek przerwany podczas snu.");
            }
        });

        // Uruchomienie wątku
        thread.start();

        // Przerwanie wątku po 3 sekundach
        try {
            Thread.sleep(3000);
            thread.interrupt();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

Komentarze do kodu

  1. Tworzenie nowego wątku: Wątek jest tworzony poprzez przekazanie lambdy do konstruktora Thread. Lambda zawiera kod, który ma być wykonany przez wątek.
  2. Zatrzymywanie wątku: W przykładzie użyto Thread.sleep(1000) do symulacji dłuższej operacji. Każde wywołanie sleep jest otoczone blokiem try-catch dla InterruptedException, który jest rzucany, gdy wątek jest przerwany podczas snu.
  3. Sprawdzanie flagi przerwania: W pętli, po każdym przebudzeniu, sprawdzamy flagę przerwania wątku za pomocą Thread.currentThread().isInterrupted(). Jeśli flaga jest ustawiona, wątek kończy działanie.
  4. Uruchomienie i przerwanie wątku: Wątek jest uruchamiany za pomocą thread.start(). Po krótkim czasie w głównym wątku aplikacji przerwany jest za pomocą thread.interrupt().

Podsumowanie

Sprawdzanie, czy wątek został przerwany w Javie, jest niezbędne dla prawidłowego zarządzania wątkami i ich bezpiecznego zamykania. Umożliwia to aplikacji reagowanie na przerwania i wykonanie odpowiednich czynności kończących działanie wątku, co jest szczególnie ważne w przypadku operacji blokujących, takich jak czekanie na zakończenie wejścia-wyjścia.

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