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
- 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. - Zatrzymywanie wątku: W przykładzie użyto
Thread.sleep(1000)do symulacji dłuższej operacji. Każde wywołaniesleepjest otoczone blokiemtry-catchdlaInterruptedException, który jest rzucany, gdy wątek jest przerwany podczas snu. - 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. - 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.

