同期ブロック内でこの例外を取得し続けます。同期ブロックでは、同期されている同じオブジェクトで待機を呼び出します。スレッドが最初に中断されるとはどういう意味ですか? 第二に、これが発生する通常のシナリオは何ですか? 何が起こっているのか、または私が何をすべきかについて何かアドバイスはありますか?
2 に答える
割り込みメカニズムは、できるだけ早くスレッド自体を終了する必要があることをスレッドに通知するために使用されます。これにより、中断されたスレッドは、データを一貫性のない状態のままにすることなく、安全に終了できます。
スレッドが最初に中断されるとはどういう意味ですか?
Thread.interrupt()
これは、スレッド オブジェクトで何かが呼び出されたことを意味します。これinterrupted
により、スレッドにフラグが設定され、特定のメソッド呼び出しが例外で終了します。
第二に、これが発生する通常のシナリオは何ですか?
これは通常、2 番目のスレッドがこのスレッドの実行を停止するように指示したい場合に使用されます。呼び出しは直接行うことも、ライブラリ メソッドによって行うこともできます。たとえば、ThreadPoolExecutor.shutdownNow()
割り込みを使用して、実行中のタスクを終了 (しよう) します。
スレッドを中断しても、スレッドが停止するとは限らないことに注意してください。実際、例外がスローされた場合を除いて、スレッドはinterupted()
orを呼び出した場合にのみ中断されたことに気づきisInterupted()
ます。それでも、フラグをクリアして、何も起こらなかったかのように続行することができます。
何が起こっているのか、何をすべきかについてのアドバイスはありますか?
中断されたスレッドを「制御」しているものを見てください。