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
進開發學習交流群: