package com.javarush.task.task16.task1617;
/*
Отсчет на гонках
*/
public class Solution {
public static volatile int numSeconds = 3;
public static void main(String[] args) throws InterruptedException {
RacingClock clock = new RacingClock();
Thread.sleep(3500);
clock.interrupt();
}
public static class RacingClock extends Thread {
public RacingClock() {
start();
}
public void run() {
Thread current = Thread.currentThread();
while (!current.isInterrupted()) {
if (numSeconds == 0) {
System.out.print("Марш!");
break;
}
if (current.isInterrupted()) {
System.out.print("Прервано!");
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
System.out.print(numSeconds + " ");
numSeconds--;
}
}
}
}Shdbdbd Susjebj
22 уровень
Почему interrupt в main не прерывает работу нити?
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
21 сентября 2020, 17:48решение
А зачем тут Thread.currentThread()?
И зачем ты ловишь InterruptedException с помощью пустого catch?
Остановиться твои часы просто не успевают - твой цикл работает меньше, чем 3,5 секунды.
Если уменьшишь sleep в main, то они успеются прерваться - но ты этого не заметишь, потому что после прерывания они продолжат работать снова - из-за твоего catch.
+3
Shdbdbd Susjebj
21 сентября 2020, 19:03
Я не до конца понял, когда sleep бросает исключение. Можешь объяснить?
0
Ksenia VolkovaJava Developer в DXCMaster
21 сентября 2020, 19:06полезный
Если во время sleep, который внутри цикла, сработает clock.interrupt()
+1