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 metodyrun
.- Wywołujemy
cleanUp()
w blokufinally
, 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.