线程打开套接字,主程序退出会发生什么?

4

如果一个线程打开了一个套接字而主程序退出了,会发生什么?有时候我看到线程在主程序退出后还会运行一两秒钟,但是当主程序退出时,线程打开的套接字会被关闭吗?还是要等到该线程最终清理自己并死亡时才关闭套接字?

2个回答

7
当程序(即JVM进程)停止时,所有资源都会被释放。如果有System.exit()调用,则JVM停止。另一方面,如果您的主线程完成执行,则JVM将继续运行,直到没有更多非守护线程在运行。因此,如果处理套接字通信的线程是非守护线程,则它将继续运行。

0

如果主程序结束,线程将被预先终止。因此,在主程序结束后1或2秒钟它们无法运行。

我恳请您稍微了解一下进程间通信,这是计算机系统中进程交换信息的标准方式。您还应该了解进程和线程。您的问题表明您还没有关于线程的概念。这里可以找到一个入口点:Java教程-进程等

但是为了回答这个问题,JVM使用本地C或C++库,具有类似于此man-page的功能:Linux中的socket man-page。这些库用于直接与操作系统进行交互。

打开绑定到Java进程的套接字意味着,只要父进程运行(从用户的角度来看),套接字就会被保留。当现在一个进程被终止时,该进程的所有线程也将被结束。但是套接字不会被关闭,因为它是操作系统中的一个单独的进程,并由操作系统和JVM处理。JVM将负责(为您)终止调用创建它们的程序或进程所属的所有套接字。换句话说,JVM将自动调用操作系统关闭套接字(不要依赖它)。否则,作为一个开放的套接字的孤儿进程被认为是危险的。

垃圾收集和调用任务需要一些时间。希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接