2017-12-13 3 views
-6

"スレッドの実行メソッドが最後の命令を実行したとき、スレッドはオブジェクトとして死ぬ" はスレッドの1つの演習では偽であると言われています。 なぜそれが間違っていますか?スレッドに関する概念(スレッドが死ぬとき)

+0

おそらく、 'Object'自体が次のGarbageCollectorサイクルまで破壊されないからです。 –

+0

実行を終了すると、 'Thread'オブジェクトはGCedされません。最初にすべての参照を削除する必要があります。 –

答えて

1

これは奇妙な質問です。 「物体としての死」は従来の用語ではない。

Threadオブジェクトのインスタンスは、ほかのJavaオブジェクトと同様に動作します。もう到達できなくなるとすぐにガベージコレクションが行われます。ガーベージコレクションの詳細については、https://stackoverflow.com/a/5690468/3765428を参照してください。いくつかの他の目的は、保持またはスレッドオブジェクトを指すように

Object thread = new Thread()

があれば生きている:変数によって指し示されているオブジェクト AKA -

+0

ニットニットを選択しますが、 'Thread'オブジェクトと他のオブジェクトの間には小さな違いがあります。言語の仕組みに違いはありませんが、実際的な違いです。あなたのプログラムが新しい 'Thread'オブジェクトを作成し、スレッドを開始し、参照を投げ捨てると、 'Thread'オブジェクトは新しいスレッドのスタックから隠された参照を介して引き続き到達可能です。少なくともスレッドが実行されている間は引き続き到達可能です。 –

0

は、「ダイ」を定義するために一般的に を必要とします。例: Object[] threads = [thread, ...] //Psudo code スレッドオブジェクトが指し示す/保持している/などのスレッドオブジェクトとそれが破棄されていない限り、それはまだ '生きている'です。

とオブジェクトへの1ポイント、それはまだそれがに(すべてのオブジェクトに存在する)Dispose()メソッドを呼び出すようにするためにGarbageCollector(GC)サイクルを待つ必要がない場合でも、それを「殺す」