线程创建范围和垃圾收集器
本文关键字:收集器 创建 范围 线程 | 更新日期: 2023-09-27 17:59:43
如果我们在方法范围而不是在类范围声明线程,这对垃圾收集器有什么不同吗,比如:
//scenario 1
public class Foo
{
public Foo()
{
new Thread(()=> /*engine*/) { IsBackground = true }.Start();
}
}
//scenario 2
public class Bar
{
private readonly Thread _engineThread = null;
public Bar()
{
_engineThread = new Thread(()=> /*engine*/) { IsBackground = true };
_engineThread.Start();
}
}
是-在第一种方法中,一旦底层线程完成,Thread
对象就有资格进行垃圾收集。
在第二种方法中,如果Bar
的实例仍然不符合垃圾收集的条件,则将阻止Thread
对象被垃圾收集。请注意,我怀疑这是否会对底层操作系统线程产生任何影响。
不过,我不会考虑GC的含义——我会专注于可读性。出于某种原因,您是否需要引用该背景线程?如果是这样,请使用第二种方法,以便您可以使用它。如果不需要它,那么将它作为字段是毫无意义的。