.net – 一旦线程启动,我应该保持对线程的引用吗?
发布时间:2020-11-17 14:07:02 所属栏目:Python 来源:互联网
导读:我一直在阅读多线程应用程序的代码和示例.我不时会看到一个代码片段: class Program{ static void Main(string[] args) { Console.WriteLine(started); Go(); Console.WriteLine(press [ENTER] to quit);
我一直在阅读多线程应用程序的代码和示例.我不时会看到一个代码片段: 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启动的. 然而,失去对线程的引用并不是一种好的做法.这意味着您无法检查它是否仍在运行.这意味着当它应该停止时你无法阻止它.例如,当用户想要退出程序时. (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |