.net – 一旦线程启动,我应该保持对线程的引用吗?

前端之家收集整理的这篇文章主要介绍了.net – 一旦线程启动,我应该保持对线程的引用吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在阅读多线程应用程序的代码和示例.我不时会看到一个代码片段:
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("started");
        Go();
        Console.WriteLine("press [ENTER] to quit");
        Console.ReadLine();
    }

    private static void Go()
    {
        var thread = new Thread(DoSomething);
        thread.Start();
    }

    private static void DoSomething()
    {
        Console.WriteLine("doing something");
    }
}

它一直困扰着我:我应该在某处保留对(前台)线程的引用吗?毕竟,它是Go方法中的局部变量.因此,一旦Go的执行完成,线程引用应该被垃圾收集.也许,也许,线程将在执行时进行GC操作?

如果它是后台线程,答案会改变吗?

提前致谢!

解决方法

线程是其生命周期不受垃圾收集器控制的对象的一个​​示例.它是一个操作系统对象.只要线程正在运行代码,那就是活着的. Thread类只是它的包装器.另一个例子是一个窗口,只要您的代码用户没有关闭它,它就会存活. Winforms不要求您持有对Form类包装器的引用.你通常不这样做:
Application.Run(new Form1());

是锅炉板代码,您不在任何地方持有对Form1类实例的引用.

您始终可以从现有运行的线程重新创建Thread对象.您可以使用Thread.CurrentThread执行此操作.它不必是您使用Thread构造函数创建的线程.它可以在线程池线程中使用.或者是托管代码未启动的线程.你的程序的主线程就是一个很好的例子,它是由Windows启动的.

然而,失去对线程的引用并不是一种好的做法.这意味着您无法检查它是否仍在运行.这意味着当它应该停止时你无法阻止它.例如,当用户想要退出程序时.

猜你在找的Python相关文章