2013-07-23 11 views

答えて

3

ロジックは、すべての割り込み可能なブロック方法と同じです。スレッドは、別のスレッドから送信されたinterrupt信号にすぐに反応することができます。

この特定の機能の使用方法は、アプリケーション設計次第です。たとえば、プール内のスレッドのうち、ロックを獲得しようとしているすべてのスレッドを強制終了させることができます。

+0

これは、スレッドが別のスレッドから送信された割り込み信号にすぐに反応することを可能にします。つまり、スレッドがlockInterruptibly()を呼び出すと、ロックが使用可能でない限り、別のスレッドからの割り込み信号を待ちます。それを手に入れる?割り込み信号を送信するスレッドは、割り込み信号を送信するまでロックを保持しますか? – MKod

+0

どのスレッドもスレッドを中断できますが、ロックを保持しているスレッドである必要はありません。 –

+0

Javaスレッドの割り込みは、ハードウェアまたはオペレーティングシステムの割り込みと異なります。割り込み配信は、非同期で優先的ではなく、同期的かつ非先取り的である。すなわち、それらは任意のポイントで発生せず、実行中のコードを一時停止(および後で再開)しない。プログラムはそれらを明示的にテストする必要があります。だから、あなたは 'lockInterruptibly'が明示的にそれらを明示的にテストし続けていると言っていますか? – overexchange

7

lockInterruptibly()ロックが既に別のスレッドによって保持されていて、ロックが取得されるまで待機する場合、ブロックすることがあります。これは通常のlock()と同じです。しかし、別のスレッドが待機中のスレッドに割り込むと、lockInterruptibly()InterruptedExceptionをスローします。