Отсчет на гонках

Задача:

1. Разберись, что делает программа.
2. Реализуй логику метода run так, чтобы каждую секунду через пробел
выдавался отсчет начиная с numSeconds до 1, а потом слово [Марш!] (см примеры).
3. Если нить работает 3.5 секунды или более, прерви ее методом interrupt и внутри нити выведи в консоль слово [Прервано!].

Пример для numSeconds=4 :
«4 3 2 1 Прервано!«

4. Если нить работает менее 3.5 секунд, она должна завершиться сама.
Пример для numSeconds=3 :
«3 2 1 Марш!«

PS: метод sleep выбрасывает InterruptedException.

Требования:

  • Метод run класса RacingClock должен содержать цикл.
  • Объект класса RacingClock должен каждую секунду уменьшать значение переменной numSeconds на единицу.
  • Метод main должен вызывать Thread.sleep(3500).
  • Метод main должен вызывать метод interrupt у объекта clock.
  • Если numSeconds равно 3, то программа должна вывести «3 2 1 Марш!».
  • Если numSeconds равно 4, то программа должна вывести «4 3 2 1 Прервано!».

Решение:


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()) {
try {
System.out.print(numSeconds + " ");
Thread.sleep(1000);
if(numSeconds == 1) {
System.out.println("Марш!");
break;
}
numSeconds--;
} catch (Exception e) {
System.out.println("Прервано!");
break;
}}}}}