C# Thread類 線程優先級

1.C#對線程進行操做時,經過Thread類,能夠對線程進行建立、掛起、恢復、休眠、終止及設置優先級。安全

Thread類位於System.Threading命名空間下,該命名空間還包含一個ThreadPool類(容許用戶使用系統提供的線程池)和一個Timer類(在線程池上執行回調方法) 函數

在線程運行期間,不一樣的時刻會表現爲不一樣的狀態,但它老是處於由ThreadState定義的一個或多個狀態中。用戶能夠經過使用ThreadPriority枚舉爲線程定義優先級,但不能保證操系統會接收該優先級操作系統

2.Thread類經常使用的屬性: .net

CurrentThread           獲取當前正在運行的線程線程

IsAlive                 獲取一個值,該值只是當前線程的執行狀態3d

Name                    獲取或設置線程的名稱orm

Priority                獲取或設置一個值,該值只是線程的調度優先級 對象

ThreadState             獲取一個值,該值包含當前線程的狀態blog

3.Thread類經常使用的方法: 進程

Abort                   調用此方法一般會終止線程

Join                    阻止調用線程,直到某個線程終止時爲止

Resume                  繼續已掛起的線程

Sleep                   將當前線程阻止指定的毫秒數

Start                   使線程被安排進行執行

Suspend                 掛起線程,或者若是線程已掛起,則不起做用

4.建立線程--Start()方法

建立一個線程,只需將其聲明併爲其提供線程起始點處的方法委託。

Thread類具備接受一個ThreadState委託或ParameterizedThreadStart委託的構造函數,該委託包裝了調用Start方法時由新線程調用的方法。

只有在調用Start方法後纔會建立實際的線程。Start方法的 兩種重載方式 :

(1)致使操做系統將當前實例的狀態更改成ThreadState.Running

語法: public void Start()

說明:該方法無參數,無返回值

(2)使操做系統當前實例的狀態更改成 ThreadState.Running,並選擇線程執行所須要的方法

語法: public void Start(Object parameter)

說明:參數parameter表示一個對象,包含線程執行的方法要使用的數據

注意:若是線程已經終止,就沒法經過再次調用Start方法來從新啓動

5.線程的掛起與恢復--Suspend方法和Resume方法

(1)Suspend方法

該方法用來掛起線程,若是線程已經掛起則不起做用

語法:public void Suspend()

說明:調用Suspend方法掛起線程時,.net容許要掛起的線程再執行幾個指令,目的是爲了到達.net認爲線程能夠安全掛起的狀態

(2)Resume方法

該方法用來繼續已掛起的線程

語法:public void Resume()

說明:經過Resume方法來恢復被暫停的線程是,不管調用了多少次Suspend方法,調用Resume方法均會使另外的線程脫離掛起狀態,並致使當前線程繼續執行

6.線程休眠--Sleep()方法

該方法用來將當前線程阻止指定的時間,有 兩種重載方式

(1)將當前線程掛起指定的時間

語法: public static void Sleep(int millisecondsTimeout)

說明:參數 millisecondsTimeout表示線程被阻止的毫秒數,指定零以指示應掛起此線程以使其餘等待線程可以執行;指定Infinite以無限期阻止線程

(2)將當前線程阻止指定的時間

語法: public static void Sleep(TimeSpan timeout)

說明:參數timeout表示線程被阻止的時間量的TimeSpan,指定零以指示應掛起此線程以使其餘等待線程可以執行;指定Infinite以無限期阻止線程

7.終止線程

終止線程能夠分別使用Abort方法和Join方法實現

(1)Abort方法

用來終止線程,有 兩種重載形式 ,都是引起的ThreadAbortExecption

public void Abort()--終止進程

public void Abort(Object stateInfo)--終止線程並提供有關線程終止的異常信息

參數stateInfo是一個對象,包含應用程序特定的信息(如狀態),該信息可供正被終止的線程使用

(2)Join方法

Join用來阻止調用線程,直到某個線程終止時爲止。有 三種重載形式

public void Join()

public bool Join(int millisecondsTimeout)

說明:參數 millisecondsTimeout表示等待線程終止的毫秒數。若是線程已終止,則返回值爲true,若是線程通過了 millisecondsTimeout指定時間後未終止,返回值爲false 

public bollJoin(TimeSpan timeout)

說明:參數 timeout表示等待線程終止的時間量TimeSpan。若是線程已終止,則返回值爲true,若是線程通過 timeout時間量以後未終止,則返回值爲false

8.線程的優先級

AboveNormal      能夠將Thread安排在具備highest優先級線程以後,在Normal以前

BelowNormal      在Normal以後,Lowest以前

Highest          在具備任何其餘優先級的線程以前

Lowest           在具備其餘任何優先級的線程以後

Normal           在AboveNormal以後,BelowNormal以前。默認值。

能夠經過調用線程的Priority屬性來獲取和設置其優先級。Priority屬性用來獲取或設置一個值,該值指示線程的調度優先級。

語法:public ThreadPriority Priority{get;set;}

說明:屬性值是ThreadPriority枚舉值之一,默認值爲Normal。

實例代碼:

static void Main(string[] args)
{
Thread thread1 = new Thread(new ThreadStart(Thread1)); //使用自定義方法Thread1聲明線程
thread1.Priority = ThreadPriority.Lowest; //設置線程的調度優先級
Thread thread2 = new Thread(new ThreadStart(Thread2)); //使用自定義方法Thread2聲明線程
thread1.Start(); //開啓線程一
thread2.Start(); //開啓線程二
Console.ReadLine();
} static void Thread1()
{
Console.WriteLine("線程一");
} static void Thread2()
{
Console.WriteLine("線程二");
}

運行截圖:

注意:這裏不少人都疑惑了,既然thread1優先級比thread2優先級低,爲何仍是先輸出的thread1的內容呢?

其實那是由於你不瞭解線程的優先級實現原理 線程的優先級並非你想象的先執行哪一個後執行哪一個 而是全部的線程不論優先級高低都會執行, 優先級越高表示CPU分配給該線程的時間片越多,執行時間就多 優先級越低表示CPU分配給該線程的時間片越少,執行時間就少 

相關文章
相關標籤/搜索