天天看點

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。

Suspend()和Resume()

本文來自部落格園,作者:農碼一生,轉載請注明原文連結: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

進開發學習交流群:
Suspend()和Resume()

繼續閱讀