5

ブロックされていない間に中断された (つまり、InterruptedException がスローされなかった) スレッドが与えられた場合、そのスレッドは後でスリープしようとしたときに InterruptedException をスローしますか?

ドキュメントには、これが明確に記載されていません。

InterruptedException - いずれかのスレッドが現在のスレッドを中断した場合。この例外がスローされると、現在のスレッドの中断ステータスがクリアされます。

4

3 に答える 3

1

これが必須であることを示すドキュメントは見つかりませんでしたが、私のシステム (32 ビット クライアント VM 1.7) では、中断されたフラットが設定されているときにスリープしようとするとスローされることがわかりました。テストコード:

static volatile boolean ready = false;

public static void main (final String... args) throws InterruptedException {
    Thread t = new Thread () {
        public void run () {
            while (!ready) {
            }
            try {
                Thread.sleep (1);
                System.out.println ("Not thrown!");
            }
            catch (InterruptedException e) {
                System.out.println ("Thrown!");
            }
        }
    };
    t.start ();
    t.interrupt (); // remove this line to change the output
    ready = true;
    Thread.sleep (100);
}
于 2014-05-17T10:15:50.017 に答える
-4

いいえ。

ドキュメントには、「このスレッドObject クラスのwait()、wait(long)、またはwait(long, int)メソッド、またはjoin()、join( long)、join(long, int)、sleep(long)、またはsleep(long, int)、このクラスのメソッドを使用すると、その割り込みステータスがクリアされ、InterruptedException を受け取ります。」

それはあなたが言及したケースを除外します。

于 2014-05-17T10:15:33.347 に答える