2009-06-21 16 views
2

2つのデーモンスレッドへの参照を保持するオブジェクトがあります。私はそれが初期化されていないコーナーケースを考慮しているので、私はファイナライザが必要かどうか判断することができます。 detinitializingの関数は、スレッドを停止します。私は先に行くと、ちょうどファイナライザを追加しますが、私は好奇心ができます生きているスレッドへの参照を保持するオブジェクトのガベージコレクション

  1. 上記のスレッドが生きている間、オブジェクトがガベージコレクト取得することはできますか?

  2. ガベージコレクションを取得できる場合は、スレッドは中断されますか?あなたはファイナライズにスレッドを停止するべきではありません

答えて

1

は、
一つのためと、は、ガベージコレクションに依存してアプリケーションの動作を行うべきではありません。

  • 異なるJVM、
  • 異なるJVMスイッチ、
  • 異なるオペレーティングシステム、
  • 異なるハードウェア・アーキテクチャ、
  • 異なるハードウェア仕様:

    ガベージコレクションは、非常にで決定的です(CPU、コア、メモリ)...

すべてがガベージコレクションに影響します。

あなたのコンセプトを再考し、私たちに詳細情報を提供してください。なぜスレッドはいつ を停止する必要がありますか。

+0

通常の場合、ユーザーは適切にdisconnect()し、スレッド(I/Oを処理する)は停止します。私は、断線が適切に行われていない場合を考えていました。 – shikhar

+0

それでは、一緒に行かなければならないと思います...キープアライブチェック? 「応答なし」のタイムアウト後、スレッドは強制終了されます。これは、GCと比較して、非常に決定的であるためです。 –

+0

あなたは精巧にできますか? "応答なし"から? btw、ここにコードはあります:http://code.google.com/p/commons-net-ssh/source/browse/src/main/java/org/apache/commons/net/ssh/trans/Transport.java #80 – shikhar

関連する問題