在上一節介紹了線程的基礎知識,下面來研究多線程的優先順序
using System;
using System.Threading;
namespace Test
{
class TestThread
{
private static void FirstThreadFun()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(Thread.CurrentThread.Name + " i = " + i);
}
Console.WriteLine(Thread.CurrentThread.Name + "的優先順序:" + Thread.CurrentThread.Priority);
Console.WriteLine(Thread.CurrentThread.Name + " 執行完畢");
}
private static void SecondThreadFun()
{
for (int j = 0; j < 10; j++)
{
Console.WriteLine(Thread.CurrentThread.Name + " j = " + j);
}
Console.WriteLine(Thread.CurrentThread.Name + "的優先順序:" + Thread.CurrentThread.Priority);
Console.WriteLine(Thread.CurrentThread.Name + " 執行完畢");
}
static void Main(string[] args)
{
//程式調用了Main()函數時,就起動了一個進程,同時也啟動了一個線程[這個線程就是主線程].
Thread.CurrentThread.Name = "MainThread";
//建立第二個線程
Thread secondThread = new Thread(new ThreadStart(TestThread.SecondThreadFun));
//取名為 secondThread
secondThread.Name = "secondThread";
//設定線程的優先順序為AboveNormal[在所有建立的新線程中,執行順序為第二]
secondThread.Priority = ThreadPriority.AboveNormal;
//建立第一個線程
Thread firstThread = new Thread(new ThreadStart(TestThread.FirstThreadFun));
//取名為 firstThread
firstThread.Name = "firstThread";
//設定線程的優先順序為最進階[在所有建立的新線程中,最先執行.線程優先順序預設為Normal,共5 級:Highest,AboveNormal,Normal,BelowNormal,Lowest]
firstThread.Priority = ThreadPriority.Highest;
for (int z = 0; z < 20; z++)
{
if (z == 10)
{
firstThread.Start();
firstThread.Join();
secondThread.Start();
secondThread.Join();
}
else
{
Console.WriteLine(Thread.CurrentThread.Name + " z = " + z);
}
}
Console.Read();
}
}
}
運行結果:
運行結果顯示:
1.主線程永遠是最先執行的,但當新線程啟動[Thread.Start()],並加入[Thread.Join()]後,主線程會暫停.
2.建立的兩個新線程 firstThread 和 secondThread , firstThread的優先順序被設為最高 Highest , secondThread的優先順序被設為第二.
3.啟動和加入也是按順序的啟動 firstThread 先啟動加入, secondThread 緊隨其後.
4.如果將 firstThread secondThread 的啟動[Thread.Start()]順序調換後會是什麼結果?[下節討論]
線程的優先順序
當線程之間爭奪CPU時間時,CPU 是按照線程的優先順序給予服務的。在C#應用程式中,使用者可以設定5個不同的優先順序,由高到低分別是Highest,AboveNormal,Normal,BelowNormal,Lowest,在建立線程時如果不指定優先順序,那麼系統預設為ThreadPriority.Normal。
給一個線程指定優先順序,我們可以使用如下代碼:
//設定優先順序為最低
myThread.Priority=ThreadPriority.Lowest;
通過設定線程的優先順序,我們可以安排一些相對重要的線程優先執行,例如對使用者的響應等等。