2013-07-30 6 views
7

Doskonale rozumiem, co robi (przynajmniej mam taką nadzieję). To naprawdę nie przerywa wątku. To sprawia, że ​​Thread.isInterrupted() jest prawdziwe, a kod ma na celu sprawdzenie, jaka metoda i zatrzymanie samego wątku.Thread.interrupt() in Java: o co ci chodzi?

Moje pytanie brzmi: dlaczego potrzebujemy tej metody? Wydaje się, że można go całkowicie zastąpić, deklarując flagę logiczną określającą, czy wątek powinien zostać zatrzymany? Czy żaden podręcznik Java nie używa tej flagi boolowskiej jako najlepszego przykładu użycia słowa kluczowego volatile?

Jestem szczególnie zdezorientowany, ponieważ wydaje się, że nie ma sposobu na "nieprzerwane" wątek, ponieważ Thread.resume() jest przestarzałe. To sprawia, że ​​interrupt() jest jeszcze mniej użyteczna niż flaga boolowska, którą piszę sam.

Czy nie jest to być może nieco łatwiejsze do napisania, czy Thread.interrupt() robi coś innego niż moja flaga Boole'a?

Odpowiedz

7

od powiązanego post:

Thread.interrupt() ustawia przerwaną Stan/flagę docelowej wątku. Następnie kod działający w tym wątku docelowym MAY odpytać status przerwany i obsłużyć go. Niektóre metody, takie jak blok Object.wait() można spożywać natychmiast przerwany stan i wykorbienia odpowiedniego wyjątku (zwykle InterruptedException)

Z javadocs

wiele metod, które rzucają InterruptedException takie jak uśpienie, są przeznaczone do anulowania ich bieżącej operacji i natychmiastowego powrotu po otrzymaniu przerwania.

Zgodnie z przyjętą konwencją każda metoda wychodząca przez wyrzucenie wyjątku InterruptedException powoduje skasowanie statusu przerwania. Jednak zawsze jest możliwe, że stan przerwania zostanie natychmiast ponownie ustawiony na , przez inny wątek wywołujący przerwanie.

Zapewnia więc większą funkcjonalność niż ustawienie flagi binarnej.

+0

@freak Oto, co próbuję odpowiedzieć. –

+0

+1 doskonały .... – Freak