当前位置: 首页 > 编程语言 > C#

当原始类超出范围时,线程会发生什么分享

时间:2023-04-10 17:51:52 C#

C#学习教程:原类超出作用域时线程会发生什么share这个,看不懂怎么用!公共类测试{staticvoidMain(){Counterfoo=newCounter();ThreadStartjob=newThreadStart(foo.Count);线程线程=新线程(工作);线程。开始();Console.WriteLine("主程序终止");}}publicclassCounter{publicvoidCount(){for(inti=0;i<10;i++){Console.WriteLine("Otherthread:{0}",i);线程.睡眠(500);}Console.WriteLine("计数器终止");}}主程序启动计数器线程,主程序终止。无论给出以下输出,计数器线程都会继续运行。主线程终止其他线程:0其他线程:1其他线程:2其他线程:3其他线程:4其他线程:5其他线程:6其他线程:7其他线程:8其他线程:9计数器终止我的示例程序演示了虽然调用类不再存在,线程仍然存在直到完成。然而,我的理解是,一旦一个类超出范围,它的资源最终将被垃圾回收。在我的现实生活场景中,线程持续了大约1-2小时的电子邮件。我的问题是“垃圾收集最终会杀死线程还是GC知道线程仍在处理”?我的电子邮件线程会继续运行直到完成,还是有意外终止的危险?从System.Threading.Thread线程启动后,就没有必要保留对Thread对象的引用。线程继续执行直到线程过程完成。因此,即使没有引用Thread对象,线程仍然会运行。请参阅System.Threading.Thread.IsBackground的文档如果线程不是后台线程,它将阻止应用程序关闭,直到它完成。然而,我的理解是,一旦一个类超出范围,它的资源最终将被垃圾回收。这可以更准确地表述为:一旦某个对象实例无法通过托管引用从任何可执行代码访问到,它就有资格进行垃圾回收。当您创建一个执行特定对象方法的新线程时,您可以在该线程的生命周期内访问该对象的内容。只有当GC可以证明应用程序的任何线程都不能再访问该对象时,它才能清理它。由于您的代码仍然可以访问对象实例,因此它不会被GC处理。以上就是C#学习教程:原类超出作用域时线程会发生什么。分享的全部内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文来自网络收集,不代表侵权,请点击右侧联系管理员删除。如需转载请注明出处: