如果一个线程打开了一个套接字而主程序退出了,会发生什么?有时候我看到线程在主程序退出后还会运行一两秒钟,但是当主程序退出时,线程打开的套接字会被关闭吗?还是要等到该线程最终清理自己并死亡时才关闭套接字?
如果一个线程打开了一个套接字而主程序退出了,会发生什么?有时候我看到线程在主程序退出后还会运行一两秒钟,但是当主程序退出时,线程打开的套接字会被关闭吗?还是要等到该线程最终清理自己并死亡时才关闭套接字?
如果主程序结束,线程将被预先终止。因此,在主程序结束后1或2秒钟它们无法运行。
我恳请您稍微了解一下进程间通信,这是计算机系统中进程交换信息的标准方式。您还应该了解进程和线程。您的问题表明您还没有关于线程的概念。这里可以找到一个入口点:Java教程-进程等
但是为了回答这个问题,JVM使用本地C或C++库,具有类似于此man-page的功能:Linux中的socket man-page。这些库用于直接与操作系统进行交互。
打开绑定到Java进程的套接字意味着,只要父进程运行(从用户的角度来看),套接字就会被保留。当现在一个进程被终止时,该进程的所有线程也将被结束。但是套接字不会被关闭,因为它是操作系统中的一个单独的进程,并由操作系统和JVM处理。JVM将负责(为您)终止调用创建它们的程序或进程所属的所有套接字。换句话说,JVM将自动调用操作系统关闭套接字(不要依赖它)。否则,作为一个开放的套接字的孤儿进程被认为是危险的。
垃圾收集和调用任务需要一些时间。希望这能有所帮助。