2016-07-20 5 views
-2
public static void main(String s[]) 
{ 
    Thread t=Thread.currentThread(); 
    t.setName("main"); 
    try 
    { 
     for(int i=0;i<=5;i++) 
     { 
      System.out.println(i); 
      Thread.sleep(1000);//interrupted exception(System provides error on its own) 
     } 
    } 
    catch(InterruptedException e) 
    { 
     System.out.println("main thread interrupted"); 
    } 
} 

`In meinem Verständnis, wenn es eine Ausnahmebedingung gibt, geht das Steuerelement zum Fang, implementiert es und hinterlässt den Code. Wenn wir thread.sleep benutzen und einen Catch für disruptedException erzeugen, warum läuft es weiter? anstatt aufzuhören. Dies ist der Code, wenn die for-Schleife zum ersten Mal ausgeführt wird, gibt sie "0" aus, wenn sie auf thread.sleep stößt, also auf eine interruptedexception, sollte es nicht gehen, S.O.P abzufangen und auszuführen und zu beenden?Warum hört thread.sleep nicht beim ersten Fang auf?

+2

Nun ... haben Sie eine Ausnahme ausgelöst, die dazu führen würde, dass 'sleep' beendet wird? –

+1

Warum würden Sie annehmen, dass es beendet wird, wenn Sie es nicht erzählten? –

Antwort

0

warum läuft es weiter?

Ihr Programm wird nicht beendet, es sei denn Sie sagen es zu. Es läuft normalerweise weiter. Das Auslösen einer Ausnahme ändert das nicht.

0

Der Aufruf von Thread.sleep löst keine InterruptedException aus. Damit dieser Code eine InterruptedException auslösen kann, müsste Interrupt auf dem Thread aufgerufen werden. Ändern Sie den Code zu

public class MainInterruptingItself { 

    public static void main(String s[]) { 
     Thread.currentThread().interrupt(); 
     try { 
      for(int i=0;i<=5;i++) { 
       System.out.println(i); 
       Thread.sleep(1000); 
      } 
     } 
     catch(InterruptedException e) { 
       System.out.println("main thread interrupted"); 
     } 
    } 
} 

und es wird auszudrucken

0 
main thread interrupted 

Was hier passiert, dass Interrupt-Aufruf ist die Interrupt-Flag auf dem Thread setzt. Wenn Thread.sleep ausgeführt wird, sieht es, dass das Interrupt-Flag festgelegt ist und basierend darauf eine InterruptedException auslöst.

Verwandte Themen