1

Java SE 6 の Condition クラスの await メソッドに奇妙な問題があります。問題は、別のスレッドによる割り込み中に await メソッドが常に例外をスローするとは限らないことです。

ドキュメントには、次の場合に IE がスローされると書かれています。

... 他のスレッドが現在のスレッドを中断し、スレッド中断の中断がサポートされています ...

このサブセンテンスを解釈する方法: 「スレッド中断の中断がサポートされています」

例外をスローしないことは不可能のようです。同様の問題がありましたか?

4

2 に答える 2

2

オブジェクトが APIまたはAPIInterruptedExceptionを介してシグナルを受信した場合に何をスローしないことは不可能ではありません。仕様によると、これら 2 つのメソッドは、この状態で待機しているすべてのスレッドをウェイクアップします。signalsignalAll

于 2011-11-30T17:01:12.517 に答える
1

私は同様の問題を抱えていました.条件を待っているスレッドがありました:

Lock someLock = new ReentrantLock();
Condition someCondition = someLock.newCondition();
...
someCondition.await(timeout, TimeUnit.MILLISECONDS);

theThread.interrupt() を送信しても機能しませんでした。誤って別のスレッドが someLock をロックしていたため、await()ブロックされたことが判明しました。someLock.unlock()適切な場所に await()を追加した後、期待どおりに InterruptedException をスローし始めました。

于 2016-11-05T21:11:10.980 に答える