2

多くのスレッドJavaの例を見てきましたが、Runnableオブジェクトはタスクとして作成され、スレッドに渡されます。これらのタスクへの参照がないので、なぜこのタスクはJavaによってガベージコレクションされないのですか?または、ガベージコレクションがあり、ここで間違った質問をしていますか?あなたの貴重な考えを共有してください。

4

1 に答える 1

3

オブジェクトへの明示的な参照がないという事実は、内部JVMオブジェクトがオブジェクトへの参照を保持していないことを意味するわけではありません。

例を見てみましょう:

frame.add(new JButton("foobar"));

開発者の観点からはそれへの参照はありませんが、内部的にフレームにはコンポーネントのリストがあります。これはスレッドで起こることです。内部スケジューラは確実にスレッドへの参照を保持する必要があります。

スレッド自体は、スケジューラーから解放されたときにガベージコレクションされます(そのため、スレッドへの参照は効果的に存在しなくなります)

于 2012-10-02T00:47:15.327 に答える