私はスレッドの概念が初めてです。 run()内の現在のスレッドを中断しようとしていました。Java:forループは、現在のスレッドの中断後でも1回実行されます
基本的には、2回の睡眠で5回(forループで)単語を印刷しようとしていました。ループが2回目に実行される前にスレッドを中断しようとすると、2回目にワードが表示されます。次へループする前に一度だけ、割り込みが呼び出されたとして印刷する
word
word
sleep interrupted
は、私は言葉を期待していた:私は、コードをコンパイルして実行すると
public void run()
{
try{
for(int i=0;i<=5;i++){
//print word
System.out.println(word);
//sleep
Thread.sleep(2000);
//interrupt
Thread.currentThread().interrupt();
}
} catch(InterruptedException e){
System.out.println("sleep interrupted");
}
}
しかし、私は次のような結果を得ますforループのインスタンス第二の単語とInterruptedExceptionある同時に投げます「睡眠が中断」なぜ私は私が言葉第二の時間を印刷せずに「睡眠が中断され、」スローへの割り込み期待していた。..
を理解していません。
ありがとうございます!
中断されたフラグはチェックしません。割り込みは何もしません。 _next time_あなたが 'sleep'を呼び出すと、フラグがチェックされ、例外が送出されます。 –
@BoristheSpiderのコメントを拡張する:目的の動作を得るためには、外部ソース(別のスレッド)からスレッドを中断する必要があります。 – Turing85
@ Turing85外部ソースからの割り込みは、*すぐには中断しません。他のスレッドが 'interrupt()'を呼び出すときにスレッドが現在 'i ++'を実行していれば、それと同じ動作をします。 – Andreas