1

我有一个主线程,它创建其他线程(名称=任务),其任务独立于主线程。如果主线程完成它可以工作,那么主线程是否有可能退出并且其他线程(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 回答