[始める前に、関連する質問を検索してみましたが、何も見つからなかったので、ここで質問します]
私はJavaを学んでおり、次のシナリオが頭に浮かびます。
class MyThread extends Thread {
void run(){
//a heavy function
}
}
そして今、メインスレッドで、このスレッドを次のように呼び出します。
public static void main(...){
new MyThread().start();
System.gc(); //just a request..
//end of main thread too.
//Reference to that MyThread object is now zero.
}
そのコードを実行しました。スレッドはまだ生きているようです。すべてのスレッドが終了すると、プログラムは終了します。
私の質問:
- 参照カウントがゼロの場合、スレッドはGCの対象になりませんか?それが本当に適格である場合、ガベージコレクションの動作はどうなりますか?スレッドは終了しますか?
- 私はそれが悪いことであることを知っていますが、それがないことは明確に定義されてい
otherThread.join()
ますmain()
か?
私は自分自身についていくつか説明しています(しかし、私がどれほど正しいかはわかりません-ここに投稿した理由):
- JVMは、アクティブである限り、スレッドへの参照を維持します。したがって、参照カウントが実際にゼロになることはありません。
- 実行中の関数には暗黙
this
の参照があるため、参照カウントもゼロではありません。
上記の説明のいずれかで正しいですか?それとも他に何か説明はありますか?
ありがとう、よろしく:)