1

メインスレッドとは独立したタスクを持つ他のスレッド(Name = TASK)を作成するメインスレッドがあります。メインスレッドが終了すると、メインスレッドが終了し、他のスレッド(TASK)がデーモンスレッドにならずに実行を継続できる可能性があります。私はデーモン スレッドの概念を認識していますが、メイン スレッドが終了すると、他のすべてのデーモン スレッドが終了するため、デーモン スレッドを使用することはできません。それが不可能な場合、回避策はありますか。

4

1 に答える 1

4

メインが終了し、さらに他のスレッド(TASK)がデーモンスレッドにならずに実行を継続できる可能性はありますか?

それがデーモンスレッドの定義です。スレッドの実行を継続したい場合は、スレッドをデーモンにするべきではありません。最後のユーザー スレッドが終了すると、デーモン スレッドは JVM によって強制終了されます。JVM は、JVM が終了する前に非デーモン スレッドが終了するのを待ちます。

見る:

参考: スレッドをフォークすると、フォークしたスレッドのデーモン ステータスが取得されます。「メイン」スレッドは常に非デーモンです。

 Thread thread = new Thread(new MyRunnable(...), "my runnable");
 // make sure my thread is not a daemon thread so the JVM will wait for it
 thread.setDaemon(false);
 thread.start();

メインスレッドが終了すると、他のすべてのデーモンスレッドが終了するため、使用できません。

デーモンスレッドの定義が逆になっているのではないでしょうか? Thread.setDaemon(...)javadocsから引用するには:

void java.lang.Thread.setDaemon(boolean on)

このスレッドをデーモン スレッドまたはユーザー スレッドとしてマークします。実行中のスレッドがすべてデーモン スレッドのみの場合、Java 仮想マシンは終了します。

于 2013-05-29T11:48:49.150 に答える