public class Solution {
public static volatile int numSeconds = 3;
public static void main(String[] args) throws InterruptedException {
RacingClock clock = new RacingClock();
Thread.sleep(3500);
System.out.print("Марш!");
clock.interrupt();//add your code here - добавь код тут
}
public static class RacingClock extends Thread {
public RacingClock() {
start();
}
public void run() {
while (true) {
System.out.print(numSeconds+" ");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (Thread.interrupted()){
System.out.print("Прервано!");
break;}
else System.out.println("Not interrupt");
numSeconds--;//add your code here - добавь код тут
}
}
}
}
Даниил
22 уровень
Не понимаю почему нить не прерывается?
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Артем Divertitto Senior Android-разработчи в United Tech Master
2 января 2020, 14:52
Thread.interrupted() вдобавок к проверке снимает флаг прерывания. Если ты прервал нить, и в этот момент ты будешь в блоке try, это ты просто словишь исключение, после чего флаг isInterrupted вернется к значению false, и ты попадаешь в вечный цикл. Но так же тебе может повести, если в момент когда ты вызвал метод clock.interrupt(); после него выполнится код Thread.interrupted(), тогда цикл остановится, но вероятность маленькая. Возможно сложно написал, если не понятно, спрашивай
0
Даниил
2 января 2020, 19:23
то. есть получаем исключение, а флаг исключения сбрасывается? Так?
Это как-то странно...
А что мы как бы находимся действия try-catch все время существования нити, т е я что хочу сказать: постоянно выполняется проверка на исключение, так?
0
Даниил
2 января 2020, 20:58
И еще в других исключениях, если оно возникает, то выполнение кода переходит к следующей после catch строке, здесь же(в случае InterruptException) мы почему-то остаемся внутри цикла.
0
Артем Divertitto Senior Android-разработчи в United Tech Master
2 января 2020, 21:11
Да, флаг будет сбрасыватся после того как было выброшено исключение.
0
Даниил
3 января 2020, 11:21
И еще в других исключениях, если оно возникает, то выполнение кода переходит к следующей после catch строке, здесь же(в случае InterruptException) мы почему-то остаемся внутри цикла.
0
Ksenia Volkova Java Developer в DXC Master
3 января 2020, 12:24решение
Так ведь catch и есть внутри цикла
+3
Артем Divertitto Senior Android-разработчи в United Tech Master
3 января 2020, 17:16
Ksenia Volkova правильно написала, ты обработал исключение внутри цикла, и работа продолжилась
+1
Даниил
4 января 2020, 12:56
А черт, да я не сообразил!:)
0
Даниил
4 января 2020, 19:46
А можно привлечь ваше внимание к другой задаче(тоже с исключениями) https://javarush.com/help/33408
0