我知道所有的恶魔线程都是在主出口之后终止的。但是,如果有一些非守护进程线程在main退出后继续运行,该怎么办?此非守护进程线程的运行是否阻止所有其他守护进程线程终止?
主退出后恶魔线程继续运行,还有一些非守护进程线程还在运行吗?
发布于 2018-05-11 18:04:38
守护进程线程在JVM终止之前不会关闭。
只要没有线程调用System.exit,并且任何非守护进程线程仍在运行,JVM就不会终止。
因此,是的,运行非守护进程线程可以阻止JVM关闭,而且只要JVM还活着,它就不会强制守护进程线程终止。
当以下两种情况之一发生时,程序终止其所有活动并退出:
因此,请注意确保您的线程正确关闭。在一个项目中,我有一个定期写入文件的后台线程,我试图弄清楚为什么文件的内容会发生剧烈的变化。其原因是后台线程没有被关闭,所以它停留在周围,继续做它的事情,即使新启动的应用程序也在写入文件。执行ps -af | grep java显示,有2个java进程运行在本应有一个进程的地方。
发布于 2018-05-11 17:44:29
当所有非守护进程线程停止时,运行库将关闭。因此,如果启动另一个非守护进程线程,如事件队列,应用程序将继续运行。
发布于 2018-05-11 17:37:56
为什么不自己检查呢??
public static void main(String[] ...){
Thread t1=new Thread(()=>{for(;;);});
t1.setDeamon(true);
Thread t2=new Thread(()=>{for(;;){System.out.println(new Date())}});
t2.setDeamon(false);
t1.start();
t2.start();
Thread.currentThread().sleep(1000);
}并检查JVM是否终止。如果您的CPU 100%繁忙,则不会。
https://stackoverflow.com/questions/50297456
复制相似问题