非推奨の stop() を使用せずにスレッドを停止する方法はありますか?
スレッドは、無限ループを含む可能性のある不適切に作成された可能性のあるクラスからいくつかのメソッドを呼び出します。このクラスを変更できないため、ループ条件を制御できず、interrupt() やその他の変数を使用して正常に終了できません。この場合、stop() を使用することは正当化されますか?
非推奨の stop() を使用せずにスレッドを停止する方法はありますか?
スレッドは、無限ループを含む可能性のある不適切に作成された可能性のあるクラスからいくつかのメソッドを呼び出します。このクラスを変更できないため、ループ条件を制御できず、interrupt() やその他の変数を使用して正常に終了できません。この場合、stop() を使用することは正当化されますか?
stop() を使用できず、コードを修正できない場合、他の唯一のオプションは、別のプロセスでコードを実行してプロセスを強制終了することです。
あなたの場合、最も簡単なオプションは Thread.stop() を使用することです
この方法の問題点は、stop()
同期されたオブジェクトが一貫性のない状態のままになる可能性があることです (つまり、同期されたオブジェクトの更新の途中でスレッドを停止すると、オブジェクトの一部のみが更新される可能性があります)。スレッドが同期されたメソッド/ブロックを使用していない場合、それは安全stop
です。
スレッドが同期ブロック/メソッドを使用している可能性がある場合は、 を呼び出す前に完全にシャットダウンしてみてくださいstop
。たとえば、スレッドを呼び出してから、スレッドがまだ停止していない場合は X 分後にinterrupt
呼び出します(スレッドが呼び出しているという前提で動作します)。stop
壊れたメソッド)。壊れている可能性のあるメソッドを呼び出す前に、スレッドがすべてを一貫した状態のままにしておいてください。