2013-07-30 4 views
7

Я прекрасно понимаю, что он делает (по крайней мере, я надеюсь). Это действительно не прерывает поток. Он делает Thread.isInterrupted() истинным, и код должен проверить, какой метод и остановить сам поток.Thread.interrupt() в Java: в чем смысл?

Мой вопрос: зачем нам этот метод? Кажется, что он отлично заменяется объявлением логического флага, указывающего, следует ли остановить этот поток? Разве какой-либо учебник Java не использует этот логический флаг как лучший пример того, как следует использовать ключевое слово volatile?

Я особенно смущен, поскольку, кажется, нет способа «перевести» поток, поскольку Thread.resume() устарел. Это делает interrupt() еще менее полезным, чем булевский флаг, который я пишу сам.

Помимо того, что, возможно, немного легче писать, делает Thread.interrupt() что-то отличное от моего булевского флага?

ответ

7

От родственной post:

Thread.interrupt() устанавливает прерванное состояние/флаг целевой нити. Затем код, запущенный в этом целевом потоке, МОЖЕТ опросить состояние и прервать его соответствующим образом. Некоторые методы, которые блок, такие как Object.wait() истреблю статус прерывания немедленно бросить соответствующее исключение (обычно InterruptedException)

От javadocs

Многие методы, которые бросают InterruptedException , такие как сон, составляют , предназначенные для отмены их текущей операции и немедленного возврата, когда получено прерывание.

По соглашению, любой метод, который завершает, выкидывая InterruptedException, удаляет статус прерывания, когда он это делает. Тем не менее, всегда возможно, что статус прерывания сразу будет установлен , другим потоком, вызывающим прерывание.

Таким образом, он обеспечивает больше функциональности, а не просто устанавливает булевский флаг.

+0

@freak Это то, что я пытаюсь ответить. –

+0

+1 совершенный .... – Freak

Смежные вопросы