我编写了一个主应用程序,它创建了两个线程,即A和B.线程A是用户线程,线程B是守护进程。 A完成作业,因此JVM退出但线程B仍在运行。由于线程A和B是在JVM空间中创建的,并且JVM已经退出,因为所有用户线程都已完成执行,而线程B在哪里执行?它执行哪个进程空间?
答案 0 :(得分:1)
“守护程序”线程旨在在程序运行时在后台提供常规服务,但不是程序本质的一部分。因此,当所有非守护程序线程完成时,程序将“突然”终止,从而终止进程中的所有守护程序线程。
因此,只要所有非守护进程退出,JVM就会立即关闭所有守护进程,而不会出现任何您可能期望的任何形式(甚至不是最终)。因为你不能以一种好的方式关闭守护进程,所以它们很少是个好主意。
非守护程序执行程序通常是一种更好的方法,因为执行程序控制的所有任务都可以立即关闭。
现在来到你的特定场景。
A完成作业,因此JVM退出但线程B仍然存在 running-此假设错误B未运行
线程B执行的地方?它执行哪个进程空间?
B一旦A完成就会“突然”终止 现在没有执行,因此没有进程空间的问题。
答案 1 :(得分:0)
后台进程线程用于后台任务,例如GC或自定义用例。 守护程序线程的目的是为用户线程提供服务,一旦没有用户线程在运行并且程序退出,便不再使用守护程序线程