【问题标题】:concepts about thread(when the thread will die) [closed]关于线程的概念(线程何时死亡)[关闭]
【发布时间】:2017-12-13 14:32:49
【问题描述】:

"当一个线程的 run 方法执行完它的最后一条指令时,线程作为一个对象而死" 在我的一个线程练习中据说是错误的; 为什么不正确?

【问题讨论】:

  • 可能是因为 Object 本身直到下一个 GarbageCollector 周期才被销毁。虽然不确定这是预期的答案
  • Thread 对象不会在您完成运行后立即被 GC。必须首先删除对它的所有引用。

标签: java multithreading


【解决方案1】:

这是一个奇怪的问题。 “作为对象而死”不是一个传统术语。

Thread 对象的实例的行为与任何其他 Java 对象一样。一旦不再可访问,它将被垃圾收集。有关垃圾收集的更多信息,请参阅https://stackoverflow.com/a/5690468/3765428

【讨论】:

  • 次要选择,但Thread 对象和其他一些对象之间有一点区别。这不是语言工作方式的区别,而是实际的区别。如果你的程序创建了一个新的Thread 对象,启动线程,然后丢弃引用;然后Thread 对象将继续通过新线程堆栈中的隐藏引用访问。至少只要线程正在运行,它就可以继续访问。
【解决方案2】:

需要定义“死”, 一般来说 - 变量指向的对象 又名:

Object thread = new Thread() 只要其他一些对象持有或指向线程对象,它就活着。 例如Object[] threads = [thread, ...] //Psudo code 所以,只要线程对象指向/持有/等线程对象并且它没有被释放,它仍然是“活着的”。

即使没有人指向该对象,它仍然需要等待 GarbageCollector (GC) 循环才能调用 Dispose() 方法(存在于每个对象中)来“杀死”它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2013-09-07
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多