主執行緒與子執行緒關係
Main 所在執行緒為主執行緒(前景執行緒)。
- 所有前景執行緒結束 → 進程結束,背景執行緒被強制中止(CLR 呼叫
Abort())。
- 微觀上分時執行,宏觀上視為並行。
Thread.ThreadState 狀態枚舉
| 狀態值 | 說明 |
Unstarted | 尚未呼叫 Start() |
Running | 正常執行中 |
WaitSleepJoin | 因 Wait()/Sleep()/Join() 封鎖 |
Suspended | 已掛起,可呼叫 Resume() 恢復 |
SuspendRequested | 請求掛起中 |
Background | 背景執行緒 (對應 IsBackground=true) |
AbortRequested | 已呼叫 Abort() 但尚未終止 |
Stopped / Aborted | 已停止/已中止 |
StopRequested | 請求停止中 |
前景 vs 背景執行緒
Thread bg = new Thread(Worker);
bg.IsBackground = true; // 設為背景執行緒
bg.Start();
- 前景執行緒:維持進程存活,適合核心業務邏輯。
- 背景執行緒:不阻礙進程結束,適合輔助工作(快取刷新、日誌寫入、監控)。
- 進程關閉時,CLR 會呼叫背景執行緒
Abort(),不保證 finally 區塊執行,資源釋放需自行處理。
執行緒優先權
| 等級 | 常數 | 適用場景 |
| 最高 | ThreadPriority.Highest | 即時回應、關鍵控制迴路 |
| 高於正常 | ThreadPriority.AboveNormal | 互動式 UI 更新 |
| 正常 (預設) | ThreadPriority.Normal | 一般運算 |
| 低於正常 | ThreadPriority.BelowNormal | 批次處理、備份 |
| 最低 | ThreadPriority.Lowest | 非關鍵背景任務 |
myThread.Priority = ThreadPriority.Lowest;
核心 API 回顧
Start():啟動執行緒
Sleep(ms):靜態方法,暫停目前執行緒
Abort():請求終止 (擲 ThreadAbortException)
Suspend()/Resume():已過時,易造成死結,勿使用
Join():等待執行緒結束
下一步預告
將深入探討執行緒同步、鎖機制、死結避免、生產者消費者模式等實戰議題。