1
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
System.out.println("Interrupted, NOT PRINTED");
}
System.out.println ("This statement is printed");

このコードでは、スリープは中断された例外をスローしますが、出力に catch ステートメントを出力しません。なぜですか?

4

1 に答える 1

3

sleep メソッドの完全なJavadocを読む必要があります(強調に注意してください)。

寝る

public static void sleep(long millis) throws InterruptedException

現在実行中のスレッドを、指定されたミリ秒数だけスリープ (一時的に実行を停止) させます。これは、システム タイマーとスケジューラの精度と正確さに従います。スレッドは、どのモニターの所有権も失いません。

パラメータ:
     millis - スリープする時間の長さ (ミリ秒)。
例外:
InterruptedException -いずれかのスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの中断ステータスがクリアされます。

スリープ中のスレッドが実際に中断されない限り、例外はスローされません。調べている動作をより確実にテストするコードのバージョンを次に示します。

Thread targetThread = new Thread() {
    @Override
    public void run() {
        try {
            Thread.sleep(5000);
            System.out.println("Target thread completed normally");
        } catch(final InterruptedException ie) {
            System.out.println("Target thread was interrupted");
        }
    }
};

targetThread.start();
targetThread.interrupt();
于 2013-06-07T11:53:11.383 に答える