加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:35:15 所属栏目:Python 来源:网络整理
导读:我一直在阅读多线程应用程序的代码和示例.我不时会看到一个代码片段: class Program{ static void Main(string[] args) { Console.WriteLine("started"); Go(); Console.WriteLine("press [ENTER] to quit"); Console.ReadLine(); } private static void Go
我一直在阅读多线程应用程序的代码和示例.我不时会看到一个代码片段:
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启动的.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读