新线程()和垃圾收集内存泄漏?

时间:2012-01-25 23:26:42

标签: c# multithreading garbage-collection

我有以下代码:

new Thread(new ThreadStart(delegate()
{
    // something short
})).Start();

垃圾收集器可以在Thread状态下完成此Stopped实例吗?

这个帖子的生命周期是:

  1. Before Started
  2. Running
  3. Stopped
  4. 当这个Thread将结束他们的工作时,这将由垃圾收集器收集,或者他们将继续处理该线程,以便将来重新启动它们。

2 个答案:

答案 0 :(得分:4)

线程终止后,系统不会引用Thread实例。

无法重新启动已停止的Thread实例。

答案 1 :(得分:2)

是。一旦:

  1. 线程已停止(例如,已调用的委托已返回)。
  2. 不再有Thread对象的根提法。
  3. 然后就可以收集了。你不会注意到,因为此时你没有引用该对象来检查它,它代表的线程上没有代码运行,并且永远不会有。

    我想你可以拥有一个WeakReference来保存对象的引用,当它的IsAlive为假时,你就知道它已被收集了。你为什么要关心呢?