public class Solution {
public static volatile int numSeconds = 4;
public static volatile boolean isInterupted = false;
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() {
try {
while (numSeconds > 0) {
System.out.print(numSeconds + " ");
numSeconds--;
Thread.sleep (1000);}
} catch (InterruptedException e) {
System.out.print("Interrupt!");
isInterupted = true;
}
System.out.printf ("%s", isInterupted ? "" : "Start!");
}
}
}
Mam pytanie, gdy wykonuje kod uruchamiając go mam wynik 4 3 2 1 Interrupt lub Start! gdy wątek będzie wykonywał sie krócej niż 3500 ms i nie dojdzie do rzucenia wyjątku, uśpienie wątku main działa, ale jak debuguje program to po uśpieniu wątku RacingClock, powoduje nagły przeskok do main i wywołanie metody interrupt na wątku clock co skutkuje, przerwaniem programu, dlaczego tak się dzieje?