Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Java многопоточность, метод interrupt

wefwe wefwfe Ученик (146), на голосовании 1 год назад
Здравствуйте, разбирал данный метод и столкнулся с непонятным для меня поведением программы: при вызове из метода main метода interrupt, если не использовать закомментированную 26 строку, наш цикл будет выполняться бесконечно. Через дебаггер я выяснил, что с использованием блока try-catch внутри while, значение переменной interrupted вообще не меняется, почему?
Голосование за лучший ответ
Евгений Фомин Мудрец (14229) 1 год назад
Если посмотреть описание метода sleep, то там про выбрасывание InterruptedException сказано следующее: Throws InterruptedException – if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.

По всей видимости, статус interrupted будет сброшен после того, как выбросится это исключение. Поэтому isInterrupted снова вернет false. Ну а catch блок пустой, поэтому цикл продолжает крутиться.
Оракул Оракул (62095) 1 год назад
Потому что вы вызываете прерывание потока из другого потока. У потока main нет доступа просто взять и прервать поток t1. Только в операции ввода/вывода.
Загляните внутрь interrupt метода.
Похожие вопросы