0

Threadを拡張するクラスを作成しました。

このクラスにはいくつかのメソッドが定義されており、そのうちのいくつかはProcessストリームとIOストリームを使用してファイルをダウンロードします(場合によっては数分かかります)。

スレッドを停止するために使用するJButtonもあります。これには、現在ClassName.this.stop()を実行するActionListenerがあります。これは完全に機能します。

'public void run()'メソッド内で、これらのメソッドのいくつかを実行し、スレッドを開始します。

私の質問は、非推奨のThread.stop()メソッドをinterrupt()に置き換え、それを使用してスレッドをきれいに停止するにはどうすればよいですか?

ブールフラグを使用してスレッドが中断されているかどうかを確認することを推奨するいくつかのソリューションを見てきましたが、run()メソッドが一連のメソッドを実行するだけであるため、すべてのメソッドの実行が完了するまでループは評価されません。それでも、「InterrupedException」が発生し、ループが再開されます。

もう1つの問題は、ダウンロードが進行中の場合、ダウンロードが完了し、スレッドが中断されているかどうかを確認する次のチェックに数分かかる可能性があることです。すべてを停止し、オブジェクトが「それ自体とその中のすべてを削除する」ことを望んでいます。これは、Thread.stop()が現在正しく実行していることです。

誰かアイデアはありますか?

4

1 に答える 1

2

余分なブール値のセンチネル フラグを使用しないでください。中断メカニズムに完全に依存してください。中断可能なブロッキング メソッドで時間を費やさない長時間実行タスク。もし. Thread.interrupted()_ trueの後にループが続く場合は、InterruptedExceptionこの動作を修正してください。この側面は完全にあなたの手にあります。例外を無視しないでください。作業を削減し、メソッドを終了することで反応します。

于 2012-12-07T10:08:30.417 に答える