RT。。比如我创建的一个守护线程,其拥有一个输入流,或者拥有一个 socket,或者拥有一个数据库连接,这些有 close 方法的东西。。
守护线程会在非守护线程都结束后自行结束,那它占有这些资源,不需要我写明代码以关闭或释放么?如果需要,该如何写?不需要的话。。是因为整个程序都结束了,这些资源就自然而然释放了,不会造成问题么?可如果不调用 close 方法,那 socket 的另一方,数据库连接里的数据库,知道这个连接关闭了么?
守护线程会在非守护线程都结束后自行结束,那它占有这些资源,不需要我写明代码以关闭或释放么?如果需要,该如何写?不需要的话。。是因为整个程序都结束了,这些资源就自然而然释放了,不会造成问题么?可如果不调用 close 方法,那 socket 的另一方,数据库连接里的数据库,知道这个连接关闭了么?
2 条回复 • 2020-01-13 15:07:22 +08:00
|
1
veelog 2020 年 1 月 13 日 via iPhone 进程退出,申请的资源都会被系统回收,socket 连接,在系统回收资源的时候会发 fin 包给对端
|
|
2
Newyorkcity OP @veelog
我能否这么理解,我们平时要求自己手动写输入输出流啊 socket 啊之类的 close(),是担心这个程序是一个很长时间不结束一直运行的程序,如果我们不手动关闭,容易形成类似 C 的内存泄漏的问题。。。但实际上,如果这个程序我们确定它运行不了多久多大就会结束,那不写也没事,因为程序结束退出的时候会自行把这些资源全都关闭(释放)掉?可是这是怎么实现的呢,java 又没有析构函数。 所以守护线程自动退出时的资源不需要手动明确关闭(释放),因为这意味着不就之后整个程序都要结束了。 |