new Thread()和垃圾回收内存泄漏

本文关键字:内存 泄漏 Thread new | 更新日期: 2023-09-27 18:21:21

我有以下代码:

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

垃圾收集器是否可以在Thread处于Stopped状态时完成该实例?

此线程的生存期为:

  1. Before Started
  2. Running
  3. Stopped

当这个Thread将结束他们的工作时,这将由垃圾收集器收集,或者他们将保留该线程的句柄,以便将来重新启动。

new Thread()和垃圾回收内存泄漏

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

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

是。一次:

  1. 线程已停止(例如,调用的委托已返回)
  2. 不再有对Thread对象的根引用

然后就可以收集了。不过你不会注意到,因为在这一点上,你没有对对象的引用来检查它,它所代表的线程上没有代码运行,也永远不会有。

我想你可以有一个WeakReference,它包含对对象的引用,当它的IsAlive为false时,你就会知道它已经被收集了。你为什么会在意?