while(numSeconds>0 && !Thread.currentThread().isInterrupted()) {
System.out.println(numSeconds);
try {
Thread.sleep(1000);
numSeconds--;
} catch (InterruptedException e){
System.out.println("Прервано!");
interrupt();
}
}
if(numSeconds==0) System.out.println("Марш!");
александр пьянов
34 уровень
почему сбрасывается флаг и нужно прерывать в блоке catch ещё раз? пользуюсь методом же isInterrupted
Обсуждается
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Стас Пасинков Software Developer в Zipy Master
19 апреля, 21:53
бо так воно влаштовано.
метод isInterrupted() просто перевіряє флаг
якщо було кинуте InterruptedException - це не значить, шо джава якось автоматично сама змінила цей флаг.
саме тому вам і довелося додатково викликати метод interrupt() щоб флаг змінився. і в такому разі isInterrupted() вже поверне false
0
Александр Java Developer в Magnit
16 апреля, 19:56
Добрый день, флаг сбрасывается, потому что было вызвано исключение InterruptedException.
В качестве альтернативы можем вместо interrupt(); использовать break;
ИЛИ же можем обернуть сам ЦИКЛ в try-catch, тогда нам следует просто обработать исключение.
0