標籤:
一、基本概念
1、進程:一個程式開始運行時,它就是一個進程。進程包括運行中的程式和程式所使用到的資源。而一個進程是由多個線程組成。
2、線程:線程是一個程式中的一個執行流,每個線程都有自己的專有寄存器(棧指標、程式寄存器等)。但是其程式碼區是共用的,即不同的線程可以執行同樣的函數。
3、多線程:指的是程式中包含多個執行流,即在一個程式中可以同時運行多個不同的線程來執行不同的任務。換句話說,就是允許單個程式創造出多個並存執行的線程來完成各自的任務。
4、任何程式在執行時,至少有一個主線程。
5、所有與多線程應用相關的類都放在system.threading命名空間中。
6、在thread類中包含以下幾個重要的方法:
start():啟動線程;
sleep(int):靜態方法,暫停當前線程指定的毫秒數;
abort():終止一個線程;
suspend():掛起線程,以後還可以恢複;
resume():恢複被掛起的線程;
二、簡單線程的建立步驟
我們用一個簡單的控制台應用程式來作為示範,代碼如所示:
線程的入口是通過ThreadStart代理(delegate)來提供的,我們可以把ThreadStart理解為一個函數指標,指向線程所要執行的函數。當程式調用Thread.Start()方法後,線程就開始執行ThreadStart所代表或者說指向的函數。
三、線程的優先順序
當不同線程之間爭奪CPU資源時,CPU是按照線程的優先順序來給予服務的。在c#應用程式中,使用者可以為線程設定5個不同的優先順序層級,由高到低分別為:Highest,AboveNormal,Normal,BelowNormal,Lowest 。
在建立線程時如果不指定優先順序,那麼體統預設為ThreadPriority.Normal。
給一個線程指定優先順序,可以用如下代碼:
newthreading.Priority=ThreadPriority.Lowest;
四、帶有參數的多線程
1、帶有一個參數的情況
利用Thread(ParameterizedThreadStart)初始化Thread類的新執行個體,指定允許對象線上程啟動時傳遞給線程的委託。
注意:ParameterizedThreadStart要求參數類型必須為object,所以在程式中所定義的方法的形參類型必須為object。
2、帶多個參數的情況
由於Thread預設只提供了ThreadStart和ParameterizedThreadStart兩種建構函式,所以如果需要傳遞多個參數,我們可以自己將參數作為類的屬性。定義類對象的時候執行個體化這個屬性,然後進行操作。
在上述程式中為了簡單我們只設定了一個屬性text。在實際操作中,如果想傳入多個參數,設定多個屬性即可。
c# 多線程