C#-執行緒
C Sharp
Threads
-
執行緒(線程):傳統的程式執行只會有一個執行緒,執行緒無法單獨存在活執行,只能附屬在Program之下。
-
多工(Multitasking):如同時在微軟啟動小畫家、計算盤、上網。例如:影片串流—可以邊下載邊看。
-
Thread Class
| 方法 | 說明 |
|---|---|
| Suspend() | 暫停執行執行緒 |
| Resume() | 重新啟動Suspend()後的執行緒 |
| Sleep(5) | 停止5毫秒 |
| Join() | 讓呼叫的執行緒等待,直到另外執行緒結束後才啟動 |
| Start() | 啟動執行緒 |
- Thread Property
| 屬性 | 說明 |
|---|---|
| Name | 執行緒的名稱 |
| IsAlive | 執行緒是否在執行中,傳回true,false |
| ThreadState | 執行緒狀態 |
| Priority | 執行緒優先權 |
| Thread.CurrentThread | 取得當前的執行緒參考 |
建立執行緒
//ButtonClick
OutPut.Msg="";
SumeClass sum1= new SumClass();
Thread t1 = new Thread(new ThreadStart(sum1.Sum))
tid1.Name="執行緒A";
Thread t2 = new Thread(new ThreadStart(sum1.Sum))
tid2.Name="執行緒B";
t1.Start(); //開始執行
t2.Start();
t1.Join(); //確定結束
t2.Join();
Consoloe.WriteLine=Output.Msg;
class Output
{
public static string Msg;
public static void Add(string str)
{
Msg += str + "\n"; //換行
}
}
class SumClass
{
long temp = 0
for (int i =1 , i<=3 , i++)
{
Output.Add(Thread.CurrentThread.Name + "-" + i )
Thread.Sleep(new Random().Next(50,100));
temp +=1
}
Output.Add(Thread.CurrentThread.Name+"總和="+temp)
}
結果
- 結果不一定有固定的順序。 執行緒A-1 執行緒B-1 執行緒B-2 執行緒A-2 執行緒A-3 執行緒B-3 執行緒A總和=6 執行緒B總和=6
Synchronization
- 執行緒同步:指兩個或兩個以上執行緒同時存取相同資料。例如當執行緒A存取資料時就將此鎖定 ; 不讓B、C…存取,直到A處理完才換人。
接力賽跑的概念