第一支執行緒程式
// SystemThread.cs
using System;
using System.Threading;
namespace ThreadTest {
class RunIt {
[STAThread]
static void Main(string[] args) {
Thread.CurrentThread.Name = "System Thread";
Console.WriteLine(Thread.CurrentThread.Name + " Status: " + Thread.CurrentThread.ThreadState);
Console.ReadLine();
}
}
}
輸出
System Thread Status: Running
關鍵觀念
Thread.CurrentThread 為靜態屬性,取得目前正在執行程式碼的執行緒,進程中雖有多執行緒,但單一時刻 CPU 僅執行其中一個。
- 命名空間
System.Threading 包含所有多執行緒相關型別。
Thread 類別核心方法
| 方法 | 說明 | 備註 |
Start() | 啟動執行緒,進入可執行狀態 | 僅能呼叫一次 |
Sleep(ms) | 靜態方法,暫停目前執行緒指定毫秒 | 釋放 CPU 時間片 |
Abort() | 請求終止執行緒,擲 ThreadAbortException | finally 仍會執行 |
Suspend() | 掛起執行緒 (已過時) | 易死結,勿用 |
Resume() | 恢復掛起執行緒 (已過時) | 配合 Suspend,勿用 |
Join() | 等待執行緒結束 | 可設定逾時 |
Interrupt() | 喚醒 WaitSleepJoin 狀態執行緒 | 擲 ThreadInterruptedException |
建立與啟動執行緒標準模式
Thread t = new Thread(() => {
// 執行緒工作本體
Console.WriteLine("Worker running on thread {0}", Thread.CurrentThread.ManagedThreadId);
});
t.Name = "MyWorker";
t.IsBackground = true; // 視需求設定
t.Start();
常見陷阱
- 忘記呼叫
Start() → 執行緒永遠 Unstarted。
- 在迴圈中
new Thread 卻未啟動 → 資源浪費。
- 使用
Suspend/Resume 導致死結 → 改用 Monitor/lock/Semaphore 同步。
Abort() 釋放非受控資源不完全 → 實作 IDisposable + finally 確保釋放。
- 上一篇文章: C# 多執行緒機制探索(四):執行緒狀態、優先權、前景/背景執行緒與生命週期
- 下一篇文章: C# 多執行緒機制探索(一):基本觀念、進程與執行緒關係、優缺點分析
Copyright ©
程式碼之家 All Rights Reserved