2

Oracle Docs から割り込みを読んでいます。次の部分がわかりません。それは次のように述べています

InterruptedException をスローするメソッドを呼び出さずにスレッドが長時間実行された場合はどうなりますか? 次に、定期的に Thread.interrupted を呼び出す必要があります。これは、割り込みが受信された場合に true を返します。例えば:

for (int i = 0; i < inputs.length; i++) {
    heavyCrunch(inputs[i]);
    if (Thread.interrupted()) {
        // We've been interrupted: no more crunching.
        return;
    }
}

理解するために頭をかきむしっていますが、InterruptedException をスローするメソッドを呼び出さずにスレッドが長時間経過した場合は、どういう意味ですか? 第二に、Thread.interrupted() の使用法は何ですか?それは、スレッドがそれ自体に割り込みを送信できる方法ですか? このシナリオの実際の使用法は何ですか? ありがとう。

4

6 に答える 6

2

このコードを実行しているスレッドを中断すると

for (int i = 0; i < inputs.length; i++) {
    heavyCrunch(inputs[i]);
}

スレッドに中断ステータスを設定するだけですが、停止しません

Thread.interrupted中断されたステータスが設定されている(およびクリアされている)かどうかをテストします。

if (Thread.interrupted()) {
   return;
}

コードを割り込み可能にするループ

于 2013-08-07T10:00:05.020 に答える
0

私は理解するために頭を悩ませていますが、それは何を意味するのInterruptedExceptionでしょうか?

A: 他のスレッドinterupt()がこのスレッドのメソッドを呼び出した場合、およびこのスレッドがクラスの、、、またはメソッド、またはこのクラスの、、、、、またはメソッドの呼び出しでブロックされている場合、wait()その割り込みステータスはクリアすると を受け取ります。それ以外の場合は、割り込みステータスを設定するだけです。wait(long)wait(long, int)Objectjoin()join(long)join(long, int)sleep(long)sleep(long, int)InterruptedException

第二に、の使用法は何Thread.interrupted()ですか?それは、スレッドが自分自身に割り込みを送信できる方法ですか? このシナリオの実際の使用法は何ですか?

A:Thread.interrupted()現在のスレッドの割り込みステータスを検出し、true設定されている場合は戻り、ステータスをクリアするために使用されます。スローしInterruptedExceptionてスレッドを終了するか、単に終了するなど、他のスレッドの割り込み呼び出しに応答するために、これをチェックします。

于 2013-08-07T10:02:26.180 に答える