0

Thread を拡張するクラス XYZ があり、それはシングルトンでもあります (はい。私のアプリケーションにはそれが必要です)。

run メソッドには、次のようなものがあります。

public void run() {
    service.start();
}

service.start()にかかる時間は膨大です。また、私のアプリケーションでは常にスレッドを実行する必要はありませんが、事前に決定することはできないため、アプリケーションの起動中にこのスレッドを開始しています。

これで、アプリケーションがスレッドを必要としない場合、スレッドは非常に迅速に完了し、スレッドが終了するのを待つだけで済みます。

stop() メソッドを使用しようとしましたが、非推奨であることがわかりました。

4

4 に答える 4

2

通話の代替方法については、この記事を参照してくださいstop()

http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html

于 2012-06-29T08:55:46.547 に答える
1

stopはずっと前に廃止されており、使用すべきではありません。スレッドの終了は、Java の協調プロセスです (つまり、中断するコードではなく、中断されたコードが停止を要求されたときに何かを実行する必要があります)。1 つの方法は、thread.interrupt()中断する必要があるスレッドを呼び出すことです。

次に、実行中のスレッドで生成された中断例外をキャッチするか、中断ステータスを定期的に確認する必要があります。実行中のスレッドが実行を停止する必要があることを検出したら、必要に応じてクリーンアップ タスクを実行し、実行していたものを終了できます。

于 2012-06-29T08:58:00.540 に答える
0

とにかく高速だと言ったクリーンアップ処理を実行するようにスレッドに信号を送り、次にThread.joinを実行します。

于 2012-06-29T08:54:08.450 に答える
0

あなたの質問は、で何が起こっているかに大きく依存していservice.start()ます。外部リソースを開いている場合、当然のことながら、適切なクリーンアップなしでスレッドに割り込んで強制終了することはできません。プロシージャは、start適切なクリーンアップで中断可能にするために明示的にコーディングする必要があります。

于 2012-06-29T08:56:59.553 に答える