using System;
using System.Threading;
class SingleThread
{
static void Main(string[] args)
{
var st = new SingleThread();
var th = new Thread(new ThreadStart(st.SayHello));
th.Start();
}
public void SayHello() => Console.WriteLine("Hello from a single thread.");
}
using System;
using System.Threading;
class SyncData
{
int index = 0;
string[] comments = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十",
"十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十" };
public string GetNetComment()
{
lock (this) // 同步鎖定
{
if (index < comments.Length)
return comments[index++];
return "empty";
}
}
}
class Synchronization
{
SyncData sdat = new SyncData();
public void GetComments()
{
string comment;
do
{
comment = sdat.GetNetComment();
Console.WriteLine($"Current Thread: {Thread.CurrentThread.Name}, comment: {comment}");
} while (comment != "empty");
}
static void Main(string[] args)
{
var sync = new Synchronization();
var t1 = new Thread(new ThreadStart(sync.GetComments)) { Name = "Thread 1" };
var t2 = new Thread(new ThreadStart(sync.GetComments)) { Name = "Thread 2" };
var t3 = new Thread(new ThreadStart(sync.GetComments)) { Name = "Thread 3" };
t1.Start(); t2.Start(); t3.Start();
}
}
| 概念 | 說明 |
|---|---|
| ThreadStart 委派 | 指向無參數、無回傳值的方法,作為執行緒進入點 |
| Thread.Start() | 將執行緒加入排程器,非同步返回,實際執行時間不確定 |
| lock(obj) | 取得物件的互斥鎖,確保同一時間只有一個執行緒進入 critical section |
| Thread.CurrentThread.Name | 除錯時識別執行緒的好幫手,Visual Studio 執行緒視窗直接顯示 |
Task.Run(() => DoWork()) 取代 new Thread,支援 await、續標、例外傳播、執行緒池複用。ConcurrentDictionary、ConcurrentQueue 等無鎖/細粒度鎖實作,避免手寫 lock。Control.Invoke / Dispatcher 易出錯結論:教學理解 Thread 基礎機制;生產代碼優先使用 Task/async-await 體系。