线程对象Thread会被GC回收吗?

BusyDonkey 2012-02-16 10:42:06

protected void Go()
{
object obj=new object();

Thread th = new Thread(() => {
for (int i = 0; i < 1000; i++)
{
Thread.Sleep(500);
}
});

th.IsBackground = true;
th.Start();
}

static Main(string[] args)
{
Go();
Console.ReadKey();
}



如上代码所示,Go函数执行完只是一瞬间的事,我知道在Go函数执行完后,由于变量obj超出作用域范围,变量obj会被回收,从而导致它所指向的object对象由于没有被任何变量引用,而被GC回收。

但是请问Go函数里面的Thread对象也会这样吗? 我是指Go函数里面创建的线程对象,也会因为Go函数执行完毕,指向线程对象的引用变量th超出作用域被释放,从而导致Go函数里面已经Start的线程对象被GC回收而停止运行吗?
...全文
1523 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BusyDonkey 2012-02-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wmesci 的回复:]
Thread变量会被回收,但对应的线程不会终止
[/Quote]

就是说线程的作用域是整个进程,它并不会因为没有相应的变量指向它而被GC回收,是吗?
wmesci 2012-02-16
  • 打赏
  • 举报
回复
Thread变量会被回收,但对应的线程不会终止
BusyDonkey 2012-02-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 foreachif 的回复:]
楼主不必担心会被自动回收
“一旦启动线程,便不必保留对 Thread 对象的引用。 线程将继续执行,直到该线程过程完成。”
--http://msdn.microsoft.com/zh-cn/library/system.threading.thread.aspx
[/Quote]

OK,非常感谢!结贴了!
WAN 2012-02-16
  • 打赏
  • 举报
回复
楼主不必担心会被自动回收
“一旦启动线程,便不必保留对 Thread 对象的引用。 线程将继续执行,直到该线程过程完成。”
--http://msdn.microsoft.com/zh-cn/library/system.threading.thread.aspx

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧