Java中的守护进程线程及其进程空间

时间:2013-12-13 06:44:35

标签: java multithreading

我编写了一个主应用程序,它创建了两个线程,即A和B.线程A是用户线程,线程B是守护进程。 A完成作业,因此JVM退出但线程B仍在运行。由于线程A和B是在JVM空间中创建的,并且JVM已经退出,因为所有用户线程都已完成执行,而线程B在哪里执行?它执行哪个进程空间?

2 个答案:

答案 0 :(得分:1)

“守护程序”线程旨在在程序运行时在后台提供常规服务,但不是程序本质的一部分。因此,当所有非守护程序线程完成时,程序将“突然”终止,从而终止进程中的所有守护程序线程。

因此,只要所有非守护进程退出,JVM就会立即关闭所有守护进程,而不会出现任何您可能期望的任何形式(甚至不是最终)。因为你不能以一种好的方式关闭守护进程,所以它们很少是个好主意。

非守护程序执行程序通常是一种更好的方法,因为执行程序控制的所有任务都可以立即关闭。

现在来到你的特定场景。

  

A完成作业,因此JVM退出但线程B仍然存在   running-此假设错误B未运行

线程B执行的地方?它执行哪个进程空间?

  

B一旦A完成就会“突然”终止   现在没有执行,因此没有进程空间的问题。

答案 1 :(得分:0)

后台进程线程用于后台任务,例如GC或自定义用例。 守护程序线程的目的是为用户线程提供服务,一旦没有用户线程在运行并且程序退出,便不再使用守护程序线程