2

長いファイルの読み取りや解析などのいくつかのタスクを実行するために、私は常に新しいスレッドを作成します。たとえば、ユーザーが最初に解析する必要がある長いテキスト ファイルであるshow scenario 1をクリックすると、次のように GUI を実行しているメイン スレッドから新しいスレッドを開始します。

Runnable r = new Runnable() {
   @Override
   public void run() {
      // do the work here
   }
};
new Thread(r,"new thread").start();

アプリケーションの実行中に多くのスレッドを開始する方法と同様に、これらのスレッドはいつ終了しますか? 彼らは仕事が終わってもすぐに死ぬことはないと思います。それらは他のオブジェクトと同じようにガベージコレクションされるのですか?

4

2 に答える 2

3

スレッドは、JVM (GC) によって通常のオブジェクトとは少し異なる方法で処理されます。

スレッドは、それを参照する変数がなくても、生きているときは GC ルートの 1 つです。(実行時間の長いプロセスの途中でスレッドが GC されるのは望ましくありません。)

しかし、いったん終了すると (つまり、run メソッドが実行されたとき)、ガベージ コレクションの対象になります。

于 2012-10-15T05:03:21.327 に答える
2

スレッドのライフサイクルを見てください。一度宣言すると、(願わくば) 最終的にデッド状態になります。Thread が死んでいる (つまりisAlive()ではない) とすぐに、GC はそれを拾うことができます (もちろん、ガベージ コレクションの要件が満たされている場合)。

あなたの質問に答えるには: スレッドが開始され、もはや生きていない場合、はい、GC はそれを他のオブジェクトと同様に扱います。

于 2012-10-15T04:54:40.347 に答える