W systemie Android obowiązują te same zasady, co w normalnym środowisku Java. W Javie wątki nie są zabijane, ale zatrzymywanie wątku odbywa się w sposób kooperacyjny . Wątek jest proszony o zakończenie, a następnie można go bezpiecznie zamknąć.
Często volatile boolean
używane jest pole, które wątek okresowo sprawdza i kończy się, gdy zostanie ustawiona na odpowiednią wartość.
Nie użyłbym a boolean
do sprawdzenia, czy wątek powinien się zakończyć . Jeśli użyjesz volatile
jako modyfikatora pola, będzie to działać niezawodnie, ale jeśli twój kod stanie się bardziej złożony, ponieważ zamiast tego użyjesz innych metod blokujących wewnątrz while
pętli, może się zdarzyć, że twój kod w ogóle się nie zakończy lub przynajmniej zajmie więcej czasu . może chcieć.
Niektóre metody bibliotek blokujących obsługują przerwanie.
Każdy wątek ma już stan przerwania flagi boolowskiej i powinieneś to wykorzystać. Można to zaimplementować w następujący sposób:
public void run() {
try {
while(!Thread.currentThread().isInterrupted()) {
}
} catch (InterruptedException consumed)
}
}
public void cancel() { interrupt(); }
Kod źródłowy pobrany z Java Concurrency in Practice . Ponieważ cancel()
metoda jest publiczna, możesz pozwolić innemu wątkowi wywołać tę metodę, jak chcesz.
Istnieje również słabo nazwana metoda statyczna, interrupted
która czyści stan przerwania bieżącego wątku.