2010-12-25 11 views
2

とにかくスレッドを強制終了させたり、すぐにスレッドを中断させたりすることがあります。
私のスレッドのように、実行に時間がかかります(2〜4秒)メソッドを呼び出します。このメソッドはwhile(boolean flag)ブロックにあるので、メインスレッドから中断できます。Javaの別のスレッドからすぐにスレッドを強制終了するには?

しかし、問題は、私がそれを中断した場合です。実行中のループが終了するまで待ってから次の条件チェックを行うと、実行を停止します。

私はそれがすぐに停止したい。これを行うためにとにかくありますか?

答えて

4

以前のスレッドの停止が必要な場合は、あなたのスレッドでより多くのブレークポイントを配置する必要があります。

stop()を使用するとすぐにstyopすることができますが、これはコストがかかり、多くの望ましくない副作用があります。 stop()は細心の注意を払って安全に使用することができますが、実際にはより多くのブレークポイント(スレッドが停止するかどうかを確認するポイント)を入れる方が簡単/簡単/安全です。

BTW、印刷されないエラーをスローすると、ThreadDeathがスレッドをシャットダウンできるようになります。

+0

は、クラス間で変数を共有することは可能です。または、スレッド内のwhileループの条件チェックとして使用されるブール型の戻り値型メソッドを作成し、他のクラスから割り込むことができますか?これは賢明な考えですか? –

+0

スレッドを中断する最も明白な方法は、Thread.interrupt()メソッドを使用することです。多くのブロッキング操作がすでにこれをサポートしています。 whileループでThread.interrupted()を使用しているかどうかをテストできます。 (フィールドを追加する必要はありません)。 –

+0

http://download.oracle.com/javase/tutorial/essential/concurrency/interrupt.html –

1

いいえ、私は道があるとは思わない。あなたがそれをしたくない理由があります。

Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

+1

廃止予定のメソッドを使用しても問題ありませんか? Thread.stop();私は何を見ているのかを正確にサーバー化しています。私の質問、もし私の最後にアプリケーションがうまくいけば、他のどこでもうまくいくのだろうか? –

+2

@Sara、いいえ、決してOKです。廃止とは、削除対象としてマークされていることを意味します。将来のバージョン(またはデッドコード)で完全に削除されるかもしれませんが、次のバージョンでさえある可能性があります。あなたは、決して知らない。新しいメソッドを使用するのが最善です。これは、将来コードを維持するのに苦労するためです。 – st0le

関連する問題