首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# Thread 類別全解析:方法、屬性、狀態、優先權與同步

     編輯:關於C#

System.Threading.Thread 是 .NET 建立與控制執行緒的核心類別。本文系統整理其常用方法、關鍵屬性、執行緒狀態機制、優先權設定,並說明 Sleep/Suspend/Join 差異、Abort 風險與最佳實務。

核心方法

方法用途備註
Start()啟動執行緒只能呼叫一次,重複呼叫拋出例外
Sleep(ms)讓目前執行緒睡眠釋放 CPU、保持鎖、不可被其他執行緒喚醒(除非 Interrupt/Abort)
Suspend()掛起指定執行緒已淘汰:易造成死結(持有鎖時被掛起),.NET 2.0+ 標記 Obsolete
Resume()恢復掛起執行緒配合 Suspend,同樣淘汰
Interrupt()中斷處於 Wait/Sleep/Join 的執行緒拋出 ThreadInterruptedException,執行緒可捕捉處理
Join()阻塞呼叫端直到目標執行緒結束可設定逾時毫秒數,傳回 bool 表示是否結束
Abort()請求終止執行緒極度不建議:拋出 ThreadAbortException、可能損毀資料、無法保證 finally 執行、.NET Core 已移除

關鍵屬性

  • IsAlive:執行緒已啟動且未正常結束/中止。
  • Name:除錯時極有幫助,建議啟動前設定。
  • Priority:Highest/AboveNormal/Normal/BelowNormal/Lowest,影響 CPU 時間配比,非即時保證。
  • ThreadState:位旗標組合(Running、WaitSleepJoin、Suspended、AbortRequested、Stopped、Background 等)。
  • IsBackground:背景執行緒,主執行緒結束時自動終止,不阻礙程式退出。

執行緒狀態轉換

Unstarted --Start()--> Running --Sleep/Wait/Join--> WaitSleepJoin
Running --Suspend() [Obsolete]--> Suspended --Resume()--> Running
Running --Abort()--> AbortRequested --(處理中)--> Stopped
Running --正常返回--> Stopped

單一執行緒可同時處於多個狀態(如 WaitSleepJoin | AbortRequested)。

優先權與排程

  • 高優先權執行緒獲得較多 CPU 時間片,同優先權輪流執行。
  • 低優先權執行緒僅在無高優先權可執行時獲得 CPU。
  • 優先權非即時排程保證,受 OS 排程器、處理器核心數、鎖競爭影響。
  • 避免用 Priority 解決同步問題,應使用 lock、Monitor、SemaphoreSlim、Async/Await。

同步與最佳實務

  1. 取代 Suspend/Resume:使用 ManualResetEventSlim、SemaphoreSlim、CancellationToken 協調執行緒暫停/繼續。
  2. 取代 Abort:共用 CancellationToken,執行緒定期檢查 token.ThrowIfCancellationRequested() 優雅退出。
  3. Join 逾時模式:if (!t.Join(5000)) { /* 處理逾時 */ } 避免無限等待。
  4. 背景執行緒:短期、可捨棄工作設 t.IsBackground = true。
  5. 例外處理:執行緒內未捕捉例外會終止進程(.NET 2.0+),務必在執行緒進入點 try/catch 或使用 Task 統一處理。

現代替代方案

新專案優先考慮:

  • Task.Run / Task.Factory.StartNew:Thread Pool、支援 await、例外捕捉、取消權杖。
  • Parallel.For/ForEach、PLINQ:資料平行。
  • async/await:I/O 非同步,避免封鎖執行緒。
  • BackgroundService / IHostedService:長期背景工作。

理解 Thread 底層運作,有助於除錯舊代碼、效能分析與設計高併發系統,但日常開發請擁抱 Task 與非同步模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved