Java中的线程分为两个类别,即守护程序线程(Guardian Threads>和用户线程(用户线程)。监护人线程也称为守护线线程,在后台运行,不可见;用户线程在前台运行,在前台,看。
当JVM启动时,将调用主函数。主函数所在的线程是用户线程。实际上,与此同时,在JVM中,也推出了许多监护线程,例如垃圾回收线。
守护程序线程是一个支撑线程,因为它主要用作程序中的背景计划和支持工作。这意味着,当Java虚拟机中没有非daemon线程时,Java虚拟机将退出,无论是否存在是监护人线程,也就是说,无论监护人线程结束,它都不会影响JVM的出口。
实际上,在主线程运行后,JVM将自动启动一个称为Destricjavm的线程,该线程将等待所有用户线程在结束后终止JVM进程。
在Tomcat的NIO实施Nio,Niondpoint,将打开一组接受线程以接受用户连接请求,并且一组处理线程负责特定的处理用户请求。在默认情况下,tomcat收到了关闭命令,并且没有其他用户线程,tomcat进程将立即死亡,而无需等待处理线程处理当前请求。
在线程启动之前,您可以通过调用将线程设置为守护程序线程。
有两种方法可以结束监护人线程:
使用JPS查看Java过程,可以发现,如果子线程是主线程结束的,则子线程结束;如果子线程不是后卫线程,则主线程已经结束,并且子线程未结束。
守护程序线程用于完成支持,但是当Java虚拟机出口可能无法执行时,守护程序线程中的最终阻塞。以下代码:
运行守护程序程序,您可以看到控制台上没有输出。在启动线程DaemonRunner之后,主线程(非daemon线程)以实现主方法结束。目前,Java虚拟机中没有非daemon线程,并且虚拟机需要退出。未执行。
在构造守护程序线程时,它不能依靠最终块中的内容来确保执行关闭或清洁资源的逻辑。
如果您不理解或不需要交流,可以发出消息。此外,我想喜欢,收集和关注,我将继续更新各种Java学习博客!