主线程退出的多线程,其他线程可能无限运行

时间:2013-05-29 11:46:15

标签: java multithreading

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

1 个答案:

答案 0 :(得分:4)

  

是否有可能主出口和其他线程(TASK)可以继续执行而不是作为deamon线程

这是守护程序线程的定义。如果您希望线程继续执行,那么它们是守护进程。当最后一个用户线程完成时,守护程序线程被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();
  

当主线程退出时,我们无法使用它,所有其他deamon线程都会死掉。

也许你有后台守护程序线程的定义?引用Thread.setDaemon(...) javadocs

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

将此线程标记为守护程序线程或用户线程。当运行的唯一线程都是守护程序线程时,Java虚拟机将退出。