C# ThreadState屬性分析
C#多線程有很多值得學(xué)習(xí)的地方,這里我們主要介紹C# ThreadState屬性,包括介紹主線程Main()函數(shù)和線程的優(yōu)先級(jí)等方面。
主線程Main()函數(shù)
所有線程都是依附于Main()函數(shù)所在的線程的,Main()函數(shù)是C#程序的入口,起始線程可以稱之為主線程。如果所有的前臺(tái)線程都停止了,那么主線程可以終止,而所有的后臺(tái)線程都將無條件終止。所有的線程雖然在微觀上是串行執(zhí)行的,但是在宏觀上你完全可以認(rèn)為它們在并行執(zhí)行。
C# ThreadState屬性
這個(gè)屬性代表了線程運(yùn)行時(shí)狀態(tài),在不同的情況下有不同的值,我們有時(shí)候可以通過對該值的判斷來設(shè)計(jì)程序流程。C# ThreadState屬性的取值如下:
◆Aborted:線程已停止;
◆AbortRequested:線程的Thread.Abort()方法已被調(diào)用,但是線程還未停止;
◆Background:線程在后臺(tái)執(zhí)行,與屬性Thread.IsBackground有關(guān);
◆Running:線程正在正常運(yùn)行;
◆Stopped:線程已經(jīng)被停止;
◆StopRequested:線程正在被要求停止;
◆Suspended:線程已經(jīng)被掛起(此狀態(tài)下,可以通過調(diào)用Resume()方法重新運(yùn)行);
◆SuspendRequested:線程正在要求被掛起,但是未來得及響應(yīng);
◆Unstarted:未調(diào)用Thread.Start()開始線程的運(yùn)行;
◆WaitSleepJoin:線程因?yàn)檎{(diào)用了Wait(),Sleep()或Join()等方法處于封鎖狀態(tài);
上面提到了Background狀態(tài)表示該線程在后臺(tái)運(yùn)行,那么后臺(tái)運(yùn)行的線程有什么特別的地方呢?其實(shí)后臺(tái)線程跟前臺(tái)線程只有一個(gè)區(qū)別,那就是后臺(tái)線程不妨礙程序的終止。一旦一個(gè)進(jìn)程所有的前臺(tái)線程都終止后,CLR(通用語言運(yùn)行環(huán)境)將通過調(diào)用任意一個(gè)存活中的后臺(tái)進(jìn)程的Abort()方法來徹底終止進(jìn)程。
線程的優(yōu)先級(jí)
當(dāng)線程之間爭奪CPU時(shí)間時(shí),CPU 是按照線程的優(yōu)先級(jí)給予服務(wù)的。在C#應(yīng)用程序中,用戶可以設(shè)定5個(gè)不同的優(yōu)先級(jí),由高到低分別是 Highest,AboveNormal,Normal,BelowNormal,Lowest,在創(chuàng)建線程時(shí)如果不指定優(yōu)先級(jí),那么系統(tǒng)默認(rèn)為 ThreadPriority.Normal。
給一個(gè)線程指定優(yōu)先級(jí),我們可以使用如下代碼:
- //設(shè)定優(yōu)先級(jí)為***
- myThread.Priority=ThreadPriority.Lowest;
通過設(shè)定線程的優(yōu)先級(jí),我們可以安排一些相對重要的線程優(yōu)先執(zhí)行,例如對用戶的響應(yīng)等等。
【編輯推薦】