在.NET中,在这段代码之后,是什么机制阻止了Thread
对象被垃圾收集?
new Thread(Foo).Start();
GC.Collect();
是的,可以安全地假设对线程有一个引用,我只是在徘徊确切的内容。出于某种原因,Reflector没有向我展示System.Threading
,所以我无法亲自挖掘它(我知道MS发布了.NET框架的源代码,我只是不方便)。
发布于 2008-09-17 02:20:18
只要运行时运行,运行时就会保留对线程的引用。GC不会收集它,只要有人仍然保留该参考资料。
发布于 2008-09-19 02:00:35
这取决于线程是否正在运行。如果您刚刚创建了Thread对象而没有启动它,那么它就是一个普通的托管对象,也就是符合GC条件的对象。一旦您启动线程,或者当您为已经在运行的线程(GetCurrentThread)获得线程对象时,情况就有点不同了。“公开的对象”,即托管线程,现在保持在CLR中的强引用,所以您总是得到相同的实例。当线程终止时,这个强引用将被释放,一旦您没有任何其他引用(现在已经死了)线程,托管对象就会被收集起来。
发布于 2008-09-17 02:26:14
这是垃圾收集器的硬连线特性。未收集正在运行的线程。
https://stackoverflow.com/questions/81730
复制