如果线程打开套接字并且主程序退出,会发生什么?我有时看到线程会在主程序退出后运行一两秒,但是当主程序退出时,或者当线程最终自行清理时,线程打开的套接字会被关闭吗?
答案 0 :(得分:6)
当程序(即JVM进程)停止时,将释放所有资源。如果进行了System.exit()调用,则JVM将停止。另一方面,如果主线程完成执行,JVM将继续运行,直到不再运行非守护程序线程。因此,如果处理套接字通信的线程是非守护程序线程,它将继续运行。
答案 1 :(得分:0)
如果主程序结束,线程将被初步杀死。所以他们在主程序结束后不能运行1或2秒。
我恳请您阅读一些关于进程间通信的内容,这是一个标准计算机系统中的进程如何交换信息。您还应该阅读有关进程和线程的信息。你的问题显示,你还没有关于线程的想法。这是一个可以找到的切入点:Java Tutorials - Processes and so on
但是要回答这个问题,JVM使用本机C或C ++库以及您可以在这样的手册页中找到的功能:man-page socket in Linux。这些库用于直接与操作系统交互。
打开绑定到java进程的套接字意味着,只要父进程运行(从用户视图),就会保留套接字。当现在进程终止时,此进程的所有线程也将结束。但不是套接字,因为这是操作系统中的一个独立进程,由操作系统和JVM处理。 JVM将关心(为您)即将终止属于被调用以创建它们的程序或进程的所有套接字。通过这种方式,JVM将自动调用操作系统来关闭套接字(不要依赖它)。否则会有一个孤立进程作为开放套接字,这被认为是危险的。
垃圾收集和调用任务需要一些时间。希望这有点帮助。