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