3

Eclipse でデバッグ構成 (「デバッグ セッション」) を実行し、デバッグ パースペクティブに切り替えると、コール スタック ビューに常に「スレッド」と「デーモン スレッド」が表示されます。

一部のスレッド デーモンと単なる POT (plain-old-threads) があるのはなぜですか? 前もって感謝します!

(注: デーモンとは何か、またはデーモン スレッドとは何かを尋ねているのではなく、Eclipse がどのスレッドがデーモンであるかをどのように判断するかを尋ねているだけです。)

4

3 に答える 3

5

Javaのデーモン スレッドは、バックグラウンド タスク (ガベージ コレクションなど) を実行するためにバックグラウンドで実行されるスレッド (ほとんどはJVMによって作成されます) です。デーモン スレッドユーザー スレッドの主な違いは、すべてのユーザー スレッドの実行が終了するとすぐに Java 自体が終了することです。JVMは、デーモン スレッドが実行を終了するのを待ちません。

ユーザースレッドによって作成されたスレッドをデーモンスレッドにすることができることに注意してくださいsetDaemon(true)(スレッドのstart()メソッドが呼び出される前に呼び出される必要があります)。
プログラムの実行を継続するには、常に少なくとも1 つのライブユーザー スレッドが必要です。

Eclipse は、あなたと同じように、スレッドかどうかを簡単に確認できますisDaemon()

于 2013-03-29T21:15:40.007 に答える
1

デーモン スレッドは、setDamon(true) が呼び出されたスレッドです。または、デーモン スレッドの子である任意のスレッド。私は、Eclipseが isDaemon() を使用して、どのスレッドがデーモンであるかを判断していると推測しています。

于 2013-03-29T21:15:24.073 に答える
0

デーモン以外のすべてのスレッドが終了すると、JVM は終了します。そのため、デーモン スレッドはデーモン タスク (つまり、JVM の終了を妨げてはならないタスク) に使用されます。

Threadオブジェクトが作成されたら、 を呼び出してsetDaemon(true)Threadそれをデーモンとしてマークすることができます。

その後、スレッドを呼び出しisDaemon()て、そのスレッドがデーモンとしてマークされているかどうかを判断できます。

Eclipse デバッガーは、このフラグを読み取っているだけです。

于 2013-03-29T21:19:23.790 に答える