-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 の catch を作成すると、なぜそれが実行され続けるのでしょうか? やめる代わりに。これはコードです。for ループが初めて実行されたとき、thread.sleep に遭遇したときに「0」を出力するため、中断された例外が発生します。SOP をキャッチして実行し、終了するべきではありませんか?

4

2 に答える 2

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

ここで何が起こるかというと、interrupt を呼び出すと、スレッドに割り込みフラグが設定されます。Thread.sleep が実行されると、割り込みフラグが設定されていることがわかり、それに基づいて InterruptedException がスローされます。

于 2016-07-20T16:47:21.277 に答える