new Thread()和垃圾回收内存泄漏
本文关键字:内存 泄漏 Thread new | 更新日期: 2023-09-27 18:21:21
我有以下代码:
new Thread(new ThreadStart(delegate()
{
// something short
})).Start();
垃圾收集器是否可以在Thread
处于Stopped
状态时完成该实例?
此线程的生存期为:
Before Started
Running
Stopped
当这个Thread
将结束他们的工作时,这将由垃圾收集器收集,或者他们将保留该线程的句柄,以便将来重新启动。
线程终止后,系统不会引用Thread
实例。
无法重新启动已停止的Thread
实例。
是。一次:
- 线程已停止(例如,调用的委托已返回)
- 不再有对
Thread
对象的根引用
然后就可以收集了。不过你不会注意到,因为在这一点上,你没有对对象的引用来检查它,它所代表的线程上没有代码运行,也永远不会有。
我想你可以有一个WeakReference
,它包含对对象的引用,当它的IsAlive
为false时,你就会知道它已经被收集了。你为什么会在意?