私はついに Thread.stop() の代わりに Thread.interrupt() をプログラムに実装することができました。しかし、私がこれをうまくやったかどうかはわかりません。
Thread を拡張し、いくつかのメソッドを宣言するクラスがあります。すべてのメソッドは InterruptedException をスローするように作成されています (各メソッドは I/O 集中型の操作を実行し、その一部は完了するまでに数分かかります。したがって、操作が完了するまでフラグがチェックされないため、スレッドセーフ フラグは使用していません) . また、例外をスローするために、これらのメソッド内のいくつかの場所に次のコードを追加しました。
if (this.isInterrupted()) throw new InterruptedException();
run() メソッド内で、InterruptedException の try/catch 内ですべてのメソッドを実行します。キャッチされた場合は、クラス変数に対して Process.destroy() と BufferedReader.close() を実行します。
これはすべて機能し、非常にうまく機能しているようですが、いくつか質問があります。
- 10 個を超えるメソッドがあり、そのすべてが InterruptedException をスローするのは正しいですか? これを行うより良い方法はありますか?
- isInterrupted() のチェックでメソッドを膨らませるのは正しいですか?
- catch InterruptedException ブロックの最後で、スレッドを GC で使用できるようにするために、特定の値の「リターン」または「ヌル」を実行する必要がありますか? スレッドを再作成すると、初期化に通常より時間がかかります。
- 最後に、私が行ったことに関連する問題/機能強化はありますか?
よろしくお願いします。