2014-03-22 2 views
0

Не могли бы вы посмотреть на картинку. Теперь за один шаг назад я выполнил this.interrupt(). Вы можете видеть, что this.isInterrupted() является ложным. Я внимательно изучал - «это» не изменилось. Он имел тот же идентификатор (12). Итак, почему нет результата метода interrupt()?Как я могу сделать interrupt() работу?

enter image description here

Добавлено позже. Код в тексте:

@Override 
protected void letUsFinalise() { 
    this.interrupt(); 
} 
+1

Почтовый код как текст, а не как изображение. –

+0

Ну, нечего писать. Только один метод. Если я правильно вас понял. – Trts

ответ

2

Javadoc из interrupted() говорит: имеет

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

(курсив мой)

BTW, interrupted() статический метод. Он должен быть вызван в классе Thread, а не в this. И учитывая, что он имеет побочный эффект, вы должны создать для него часы в своем отладчике. Вместо этого смотри isInterruped().

+0

Я не могу понять эту идею. Я не вызвал метод interrupted(). Я вызывал только прерывание(). Ну, прерванный() был добавлен в качестве новых часов. Но я не могу повлиять на это. – Trts

+0

Как вы думаете, отладчик может отображать значение, возвращаемое 'interrupted()', кроме вызова метода? Отладчик - это то, что вызывает 'interrupted()', потому что вы попросили отладчика посмотреть значение, возвращаемое 'interrupted()'. –

+0

Спасибо за это. Ценный опыт. Во всяком случае, я снял эти часы. И ничего не изменилось. – Trts

0

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

while(!Thread.foo.isInterrupted()){ 
    //wait or do something 
    } 
Смежные вопросы