3

タイトルが示すように、InterruptedExceptionを取得したときにjvmを強制的に終了する必要がありますか?私が尋ねる理由は、私が(Unix)割り込み信号と少し混乱しているからです。Javaアプリケーションの実行中にCtrl-Cを入力すると、ブロックしているスレッドはInterruptedExceptionを受け取りますか?

簡単に言うと、
1)InterruptedExceptionがいつ、なぜスローされたのですか?
2)JVMが外部から割り込みまたは強制終了された場合(Unixコマンドなど)、スレッドは割り込みを受けますか?

ありがとう

4

2 に答える 2

6

いいえ、通常、に応答してJVMを終了することはありませんInterruptedException

別のスレッドがそのメソッドInterruptedExceptionを呼び出した後、スレッドで発生する可能性があります。interrupt()ハードウェア割り込みやオペレーティングシステムの信号とは何の関係もありません。割り込みは、スレッドに、実行中の処理を停止し、共有メモリを損傷した状態のままにすることなく、できるだけ早く終了するように指示する方法です。

スレッドは、中断への応答方法を明示的に記述している場合にのみ中断する必要があります。通常、これは、たとえば、「キャンセル」ボタンを押すなどのユーザー操作に応答して行われます。

通常、中断は1つのスレッドにのみ影響し、アプリケーションの残りの部分は引き続き実行されます。ただし、サーバー全体をクリーンにシャットダウンすることでシグナルに応答するシグナルハンドラーをJVMにインストールすることを想像できます。これは、リクエストプロセススレッドなどの中断を伴う可能性があります。

于 2012-08-14T18:22:01.110 に答える
0

中断された例外は、JVMエラー状態とは関係ありません。休止状態のスレッドが、通常のイベントの過程で(thread.interrupt()によって)ウェイクアップされたときに受け取るものです。

于 2012-08-14T18:21:40.120 に答える