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

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

  •  
  •   Newyorkcity · 2020-01-13 07:59:59 +08:00 · 1504 次点击
    这是一个创建于 1775 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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  
    OP
       2020-01-13 15:07:22 +08:00
    @veelog
    我能否这么理解,我们平时要求自己手动写输入输出流啊 socket 啊之类的 close(),是担心这个程序是一个很长时间不结束一直运行的程序,如果我们不手动关闭,容易形成类似 C 的内存泄漏的问题。。。但实际上,如果这个程序我们确定它运行不了多久多大就会结束,那不写也没事,因为程序结束退出的时候会自行把这些资源全都关闭(释放)掉?可是这是怎么实现的呢,java 又没有析构函数。
    所以守护线程自动退出时的资源不需要手动明确关闭(释放),因为这意味着不就之后整个程序都要结束了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2657 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 15:02 · PVG 23:02 · LAX 07:02 · JFK 10:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.