【问题标题】:garbage collection of an object that holds reference to alive threads持有对活动线程的引用的对象的垃圾收集
【发布时间】:2013-11-07 06:31:04
【问题描述】:

我有一个对象包含对 2 个守护线程的引用。我正在考虑未取消初始化的极端情况,因此我可以确定是否需要终结器。用于取消初始化的函数会停止线程。我可以继续添加终结器,但我很好奇:

  1. 在上述线程处于活动状态时,对象能否进行垃圾回收?

  2. 如果可以进行垃圾回收,线程会被中断吗?

【问题讨论】:

    标签: java multithreading garbage-collection


    【解决方案1】:

    您不应该在完成时停止线程,因为
    应该使应用程序的行为依赖于垃圾回收。

    垃圾收集非常不确定:

    • 不同的JVM,
    • 不同的 JVM 开关,
    • 不同的操作系统,
    • 不同的硬件架构,
    • 不同的硬件细节(CPU、内核、内存)...

    一切都会影响垃圾回收。

    所以,请重新考虑您的概念,并给我们更多信息,为什么线程应该 何时停止。

    【讨论】:

    • 好吧,在正常情况下,用户会正确地断开连接()——并且线程(处理 I/O)将被停止。我正在考虑断开连接不正确的情况。
    • 那你应该去,让我想想,... keepalive 检查?在“无响应”超时后,线程被杀死。因为与 GC 相比,这将是非常确定的。
    • 你能详细说明一下吗? “没有回应”来自?顺便说一句,这里是代码:code.google.com/p/commons-net-ssh/source/browse/src/main/java/…
    • 这种情况是否很典型:您有客户端套接字,您向它们发送保持活动的请求,它们会响应它。当一个套接字没有响应时,它就断开了。
    • 当然,每个连接都需要一个额外的线程来进行保活。这使整个事情变得更加复杂,但是,这就是网络编程。
    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 2013-05-11
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    相关资源
    最近更新 更多