请问守护线程自动退出时,应该要求其关闭(释放)相关资源么?

2020-01-13 07:59:59 +08:00
 Newyorkcity
RT。。比如我创建的一个守护线程,其拥有一个输入流,或者拥有一个 socket,或者拥有一个数据库连接,这些有 close 方法的东西。。

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/637366

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX