关于.net:是什么阻止了C#中的线程被收集?

关于.net:是什么阻止了C#中的线程被收集?

What prevents a Thread in C# from being Collected?

在.NET中,此代码之后,什么机制阻止Thread对象被垃圾回收?

1
2
new Thread(Foo).Start();
GC.Collect();

是的,可以安全地假设某些东西引用了该线程,我只是在徘徊什么。 由于某些原因,Reflector不会向我显示System.Threading,所以我自己也无法对此进行挖掘(我知道MS发布了.NET框架的源代码,只是没有用)。


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


这取决于线程是否正在运行。如果您只是创建了Thread对象而没有启动它,则它是一个普通的托管对象,即有资格使用GC。一旦启动线程,或者为已经运行的线程(GetCurrentThread)获取Thread对象,就会有些不同。现在,"暴露对象"(托管线程)在CLR中保持强引用,因此您始终会获得相同的实例。当线程终止时,将释放此强引用,并且在您没有对Thread的其他任何引用(现已死亡)时,将立即收集托管对象。


这是垃圾收集器的硬连线功能。不收集正在运行的线程。


但是要注意的重要一点-如果您的线程标记为IsBackground = True,则不会阻止整个进程退出


好吧,可以肯定地假设,如果某个线程正在某个有引用的地方运行,那足以阻止垃圾回收吗?


将新线程分配给本地字段?

1
2
3
4
5
6
7
8
9
10
11
class YourClass
{
  Thread thread;

  void Start()
  {
    thread = new Thread(Foo);
    thread.Start();
    GC.Collect();
  }
}

垃圾回收会收集不是引用的所有内容,因此在您的代码中,没有字段/变量引用该线程,因此将对其进行收集。


推荐阅读

    linux查询线程命令?

    linux查询线程命令?,系统,第一,线程,命令,进程,代码,分时,软件,选项,界面,如

    linux线程查询命令?

    linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Lin

    linux线程查询命令?

    linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Lin

    linux多线程下载命令?

    linux多线程下载命令?,软件,工具,平台,中心,系统,代理,网络,网站,手机,官方

    linux无效对象的命令?

    linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,l

    linux断开线程命令?

    linux断开线程命令?,系统,状态,工作,代码,线程,入口,网络,管理,名称,命令,lin

    linux停止线程的命令?

    linux停止线程的命令?,系统,软件,代码,产品,进程,第一,管理,生产,通信,工具,l

    linux超线程查看命令?

    linux超线程查看命令?,系统,第一,信息,软件,命令,数据,工具,实时,界面,个数,L

    linux查看多线程命令?

    linux查看多线程命令?,系统,第一,线程,地址,数据,进程,命令,名称,软件,情况,

    linux执行线程命令?

    linux执行线程命令?,系统,工作,线程,软件,服务,管理,信息,环境,名称,命令,lin

    linux线程操作命令?

    linux线程操作命令?,系统,工作,时间,代码,线程,信息,第一,命令,函数,操作,lin

    linux下载命令多线程?

    linux下载命令多线程?,系统,单位,概念,数据,线程,进程,产品,地址,代码,状态,

    linux线程相关命令行?

    linux线程相关命令行?,系统,实时,代码,进程,线程,命令,策略,分时,时间,名称,

    linux删掉线程的命令?

    linux删掉线程的命令?,状态,线程,进程,代码,地址,时间,系统,环境,管理,传播,l

    linux多线程跑命令?

    linux多线程跑命令?,系统,代码,单位,地址,工具,入口,信息,管理,位置,服务,Lin

    linux线程挂起命令?

    linux线程挂起命令?,系统,状态,信息,概念,管理,基础,时间,暂停,设计,数据,lin

    linux下查看线程命令?

    linux下查看线程命令?,系统,线程,第一,进程,底部,环境,命令,选项,手册,存在,l

    Python3多线程爬虫讲解

    Python3多线程爬虫讲解,代码,分时,系统,网络,状态,培训,做多,时间,线程,爬

    Python的进程和线程

    Python的进程和线程,管理,数据,软件,系统,单位,进程,线程,发展,概念,地址,进