Jak obsłużyć InterruptedException w Javie?

InterruptedException jest wyjątkiem wyrzucanym w Javie, gdy wątek jest przerywany podczas czekania lub śpienia. Obsługa tego wyjątku jest kluczowa w wielowątkowych aplikacjach, gdzie odpowiednie zarządzanie przerywanymi wątkami może zapobiegać problemom takim jak niespójność danych czy wycieki zasobów.

Przykład obsługi InterruptedException

Poniższy przykład kodu demonstruje, jak prawidłowo obsłużyć InterruptedException w Javie, zapewniając, że wątek może bezpiecznie zakończyć swoje działanie po przerwaniu.

// Definiujemy klasę jako rozszerzenie klasy Thread
public class InterruptExample extends Thread {

    // Metoda run zawiera kod, który może być przerywany
    public void run() {
        try {
            // Symulacja długotrwałej operacji (np. 10 sekund)
            Thread.sleep(10000); // Czekanie na 10 sekund
        } catch (InterruptedException e) {
            // Obsługa przerwania wątku
            System.out.println("Wątek został przerwany");
            // Opcjonalnie: przywrócenie statusu przerywania
            Thread.currentThread().interrupt();
        } finally {
            // Zawsze wykonujemy czynności końcowe
            cleanUp();
        }
    }

    // Metoda do sprzątania zasobów
    private void cleanUp() {
        System.out.println("Sprzątanie zasobów...");
    }

    // Główny kod aplikacji
    public static void main(String[] args) {
        InterruptExample thread = new InterruptExample();
        thread.start(); // Uruchomienie wątku
        try {
            Thread.sleep(2000); // Czekamy 2 sekundy
            thread.interrupt(); // Przerywamy wątek
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            System.out.println("Główny wątek został przerwany");
        }
    }
}

Komentarze do kodu

  • Wątek jest uruchamiany i po 2 sekundach jest przerywany.
  • InterruptedException jest przechwytywany wewnątrz metody run.
  • Wywołujemy cleanUp() w bloku finally, aby upewnić się, że zawsze zwolnimy zasoby niezależnie od tego, czy wystąpiło przerwanie.
  • Przywracanie flagi przerywania wątku po złapaniu wyjątku jest dobrym zwyczajem. Informuje to kod wywołujący o przerwaniu.

Podsumowanie

Prawidłowa obsługa InterruptedException jest kluczowa w aplikacjach wielowątkowych. Zapewnia ona, że programy zachowują właściwe zachowanie nawet w obliczu przerwania wątków, jak w powyższym przykładzie. Należy pamiętać o zwalnianiu zasobów i ewentualnym przywracaniu statusu przerywania, aby umożliwić dalsze adekwatne reakcje na przerwanie.

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