天天看點

C#學習之路-線程(二)

将之前的第一部分沒寫到的補充一下,具體例子以後會寫。

Thread類,該類允許建立前台線程,以及設定線程的優先級。使用Thread類可以建立和控制多線程。

lamdba表達式還可以與Thread類一起使用,将線程的實作代碼傳送給Thread構造參數。

如果多個前台線程在運作,而Main()方法結束了,應用程式的程序就仍然是激活的,直到所有前台線程完成任務為止。

在預設情況下,用Thread類建立的線程是前台的,而程式池中的線程是背景的。

再用Thread類建立線程時,可以設定IsBackground屬性,來确定該線程是前台的還是背景的線程。

線程由作業系統排程,給線程指定優先級,就可以影響排程順序。

在調用Start()方法後,新線程仍不失處于running狀态,而是出于UnStarted狀态,隻有作業系統調用線程以後,才會是Running狀态,讀取Thread.TreadState屬性,就可以獲得目前線程的運作狀态。

Lock語句是設定鎖定和解除鎖定的一種簡單方式,在添加lock語句之前,先進入一個争用條件。

Interlocked類用于使變量的簡單語句原子化。提供了以線程安全的方式遞增、遞減、交換和讀取值。

lock(this){return state++} ==return Interlocked.Increment(ref state);

對于同步,Barrier類非常适用于其中工作有多個任務分支并且以後有需要合并的工作。它用于需要同步的參與者。激活一個任務時就動态的添加了其他參與者。

Monitor類的主要優點是:可以添加一個等待被鎖定的逾時值。這樣就不會無限期的等待被鎖定。

如果有大量的鎖定,且鎖定的時間總是非常短,可以使用SpinLock。

WaitHandle是一個抽象的基類,用于等待一個信号的設定。可以等待不同的信号。

Timer類用于在某個時間間隔後調用某個方法。

 public static void Thread()

        {

            var t = new Thread(first);

            t.Start();

        }

        public static  void first()

        {

            Console.WriteLine("第一個");

        }