V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Newyorkcity
V2EX  ›  问与答

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

  •  
  •   Newyorkcity · 2020-01-13 07:59:59 +08:00 · 1032 次点击
    这是一个创建于 563 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT。。比如我创建的一个守护线程,其拥有一个输入流,或者拥有一个 socket,或者拥有一个数据库连接,这些有 close 方法的东西。。

    守护线程会在非守护线程都结束后自行结束,那它占有这些资源,不需要我写明代码以关闭或释放么?如果需要,该如何写?不需要的话。。是因为整个程序都结束了,这些资源就自然而然释放了,不会造成问题么?可如果不调用 close 方法,那 socket 的另一方,数据库连接里的数据库,知道这个连接关闭了么?
    2 条回复    2020-01-13 15:07:22 +08:00
    veelog
        1
    veelog   2020-01-13 09:09:49 +08:00 via iPhone   ❤️ 1
    进程退出,申请的资源都会被系统回收,socket 连接,在系统回收资源的时候会发 fin 包给对端
    Newyorkcity
        2
    Newyorkcity   2020-01-13 15:07:22 +08:00
    @veelog
    我能否这么理解,我们平时要求自己手动写输入输出流啊 socket 啊之类的 close(),是担心这个程序是一个很长时间不结束一直运行的程序,如果我们不手动关闭,容易形成类似 C 的内存泄漏的问题。。。但实际上,如果这个程序我们确定它运行不了多久多大就会结束,那不写也没事,因为程序结束退出的时候会自行把这些资源全都关闭(释放)掉?可是这是怎么实现的呢,java 又没有析构函数。
    所以守护线程自动退出时的资源不需要手动明确关闭(释放),因为这意味着不就之后整个程序都要结束了。
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1372 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:26 · PVG 01:26 · LAX 10:26 · JFK 13:26
    ♥ Do have faith in what you're doing.