2012-01-02 4 views
2

サスペンドスレッドをすべて取得して終了するにはどうすればいいですか?ほとんどの時間中停止されているTImer-0という名前のスレッドを起動するWebアプリケーションを作成しています。 SEVERE:Webアプリケーション[/ LoggingMonitor]が名前付きスレッドを開始したようです[Timer-0]が停止しませんでした。これはメモリリークを引き起こす可能性が非常に高いです。サスペンドスレッドをキルしてください

+0

Thread.suspendで中断されていますか?それとも、一般的に何の活動もしていないということですか? – Tudor

+0

これは以下のフォローアップです:http://stackoverflow.com/questions/8677008/catalina-out-memory-leak-error – oers

+1

コンテナにスレッドを管理させます。長期的には痛みを救うでしょう。 –

答えて

2

スレッドを一時停止したくない場合は、プロセス全体が停止する可能性があります。たとえスレッドを一時停止していても、スレッドを停止することは役に立ちません。

Timer-njava.util.Timerのように聞こえます。これは、cancelを呼び出すことで解決できます。メモリリークが発生していない限り、最終的にスレッドを収集する必要があります(finalizerでキャンセル)。

+0

私はスレッドを中断しませんでした。アプリケーションをデバッグすると、他のスレッドはすべて実行されていましたが、タイマースレッドはほとんどの時間中断されました – Rookie

+0

timer.cancel()サーブレットのonContextDestroyedで、それは大丈夫ですか? – Rookie

2

スレッドを強制終了せず、代わりに使用するリソース(gcによって解放されたメモリ)を解放して、スケジューラが停止させるようにしてください。 Thread.stopは廃止予定です(サスペンドと同様)。
スレッドを手動で停止する必要がある場合は、hereまたはhere in the answersのようなフラグを使用してください。

関連する問題