Java スレッド ガベージ コレクション
指定されたコード スニペットでは、匿名クラスを使用して新しいスレッドが作成され、行 A で開始されます。次に、行 B でスレッド参照 "t" が null に設定され、メイン スレッド内のスレッドへのすべての参照が効果的に削除されます。
スレッドが存続する理由
逆あなたの推測では、スレッドは B 行以降ではガベージ コレクションを受けません。これは、実行中のスレッドがガベージ コレクション ルートと見なされるためです。
ガベージ コレクション ルート
ガベージコレクション ルートは、メイン スレッドから直接到達可能なオブジェクト、または別のアクセス可能なオブジェクトから到達可能なオブジェクトです。ガベージ コレクション ルートから到達可能なオブジェクトはすべて「ライブ」とみなされ、ガベージ コレクションの対象にはなりません。
スレッド ガベージ コレクションへの影響
実行中のスレッド以来がガベージ コレクション ルートである場合、メイン スレッドがスレッド オブジェクトへの参照を失った後でも、スレッド オブジェクトは生きたままアクティブなままになります。これにより、スレッドはタスクを完了するか手動で停止されるまで実行し続けることが保証されます。
メイン スレッドの動作
同様に、メイン スレッド自体はガベージ コレクションとみなされます。 root はプログラムのエントリポイントであるためです。したがって、プログラムの外部から参照がない場合でも、プログラムが終了するまでアクティブなままになります。
結論
要約すると、実行中の Java スレッドははガベージ コレクション ルートと見なされ、メイン スレッドに参照がない場合でもアクティブで実行されたままになります。これは、スレッドがガベージ コレクションによって途中で終了されることなくタスクの実行を継続できるようにするために必要です。
以上がJava でスレッドの参照を Null に設定した後もスレッドが生き続けるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。