首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是什么阻止C#中的线程被收集?

是什么阻止C#中的线程被收集?
EN

Stack Overflow用户
提问于 2008-09-17 10:15:25
回答 6查看 5.3K关注 0票数 17

在.NET中,在这段代码之后,是什么机制阻止了Thread对象被垃圾收集?

代码语言:javascript
代码运行次数:0
运行
复制
new Thread(Foo).Start();
GC.Collect();

是的,可以安全地假设对线程有一个引用,我只是在徘徊确切的内容。出于某种原因,Reflector没有向我展示System.Threading,所以我无法亲自挖掘它(我知道MS发布了.NET框架的源代码,我只是不方便)。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-17 10:20:18

只要运行时运行,运行时就会保留对线程的引用。GC不会收集它,只要有人仍然保留该参考资料。

票数 16
EN

Stack Overflow用户

发布于 2008-09-19 10:00:35

这取决于线程是否正在运行。如果您刚刚创建了Thread对象而没有启动它,那么它就是一个普通的托管对象,也就是符合GC条件的对象。一旦您启动线程,或者当您为已经在运行的线程(GetCurrentThread)获得线程对象时,情况就有点不同了。“公开的对象”,即托管线程,现在保持在CLR中的强引用,所以您总是得到相同的实例。当线程终止时,这个强引用将被释放,一旦您没有任何其他引用(现在已经死了)线程,托管对象就会被收集起来。

票数 9
EN

Stack Overflow用户

发布于 2008-09-17 10:26:14

这是垃圾收集器的硬连线特性。未收集正在运行的线程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/81730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档