Suspend()和Resume()
Suspend()和Resume()
一、简介
其实在C# 2.0以后, Suspent()和Resume()方法已经过时了。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被”挂起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend()。
二、代码
class Program { static void Main(string[] args) { Thread threadA = new Thread(ThreadMethod); threadA.Name = "A線程"; threadA.Start(); Thread.Sleep(3000); //休眠3000毫秒 Console.WriteLine("我現在開始恢復掛起!"); threadA.Resume(); //继续执行已经挂起的线程 Console.ReadKey(); } public static void ThreadMethod(object parameter) { Console.WriteLine("我是:{0},我現在開始掛起!", Thread.CurrentThread.Name); Thread.CurrentThread.Suspend(); //挂起当前线程 for (int i = 1; i <= 10; i++) { Console.WriteLine("我是:{0},我循環{1}次", Thread.CurrentThread.Name, i); } } }
三、运行结果
执行上面的代码。窗口并没有马上执行 ThreadMethod方法输出循环数字,而是等待了三秒钟之后才输出,因为线程开始执行的时候执行了Suspend()方法挂起。然后主线程休眠了3秒钟以后又通过Resume()方法恢复了线程threadA。
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/14821533.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。