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"); 
    } 
} 

`例外条件があるとき私の理解では、コントロールはキャッチに行き、実装してコードを残します。 thread.sleepを使用してinterruptedExceptionのキャッチを作成すると、なぜそれが実行され続けますか?終了する代わりに。これはコードで、forループが初めて実行されたときに、thread.sleepに遭遇したときに "0"を出力するので、interruptedexceptionが発生します.SO.O.Pを捕捉して終了するべきではありませんか?なぜ最初のcatchでthread.sleepが停止しないのですか?

+2

さて、あなたは 'sleep'を終了させる例外を引き起こしましたか? –

+1

あなたがそれを伝えていないと、なぜあなたはそれが終了すると思いますか? –

答えて

0

なぜ実行されますか?

あなたが指示しない限り、あなたのプログラムは終了しません。それは通常稼働し続ける。例外をトリガしてもそれは変わりません。

0

Thread.sleepを呼び出すだけでは、InterruptedExceptionは発生しません。このコードでInterruptedExceptionをスローするには、何かがスレッド上で割り込みを呼び出す必要があります。

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"); 
     } 
    } 
} 

にコードを変更し、それがここで何が起こる

0 
main thread interrupted 

をプリントアウトします割り込みを呼び出すと、スレッドで割り込みフラグをセットすることです。 Thread.sleepが実行されると、Interruptフラグが設定されており、それに基づいてInterruptedExceptionがスローされます。

関連する問題