在主线程退出的情况下存在多个线程,其他线程是否可能无限运行



我有一个主线程,它创建了其他线程(Name = TASK),它的任务独立于主线程。如果主线程完成它的工作,那么是否有可能主线程退出,而其他线程(TASK)可以继续执行,而不是作为一个守护线程。我知道守护线程的概念,但我们不能使用它,因为当主线程退出时,所有其他守护线程都会死亡。如果这是不可能的,那么是否有其他解决办法

是否有可能主线程退出,而其他线程(TASK)可以继续执行,而不是作为守护线程

这就是守护线程的定义。如果你想让线程继续执行,那么它们应该而不是是守护进程。当最后一个用户线程结束时,JVM将杀死守护线程。在JVM终止之前,JVM要等待非守护线程完成。

:

    Java中的守护线程是什么?
  • 如何创建守护线程?
  • 如何保持我的程序存活只要守护线程正在运行?

仅供参考:当你分叉一个线程时,它会获取这个分叉线程的守护进程状态。"主"线程总是非守护线程。

 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虚拟机退出。

最新更新