try {
Thread.sleep(1000);
} catch(InterruptedException e) {
System.out.println("Interrupted, NOT PRINTED");
}
System.out.println ("This statement is printed");
このコードでは、スリープは中断された例外をスローしますが、出力に catch ステートメントを出力しません。なぜですか?
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
System.out.println("Interrupted, NOT PRINTED");
}
System.out.println ("This statement is printed");
このコードでは、スリープは中断された例外をスローしますが、出力に catch ステートメントを出力しません。なぜですか?
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();