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

C# 多線程程式設計入門:Thread 基礎操作與同步範例

     編輯:關於C#

前言

.NET 將多線程功能封裝在 System.Threading 命名空間。本文介紹 Thread 類別核心操作:啟動、結束、暫停、恢復、優先權,並提供完整範例展示主執行緒與工作執行緒交替執行的行為。

核心操作速查表

操作方法/屬性說明
啟動new Thread(ThreadStart).Start()建立並啟動執行緒
結束Abort() (已過時)強制終止,建議用取消權杖模式
暫停Thread.Sleep(ms)讓目前執行緒睡眠指定毫秒
掛起Suspend() (已過時)不建議使用,易造成死結
恢復Resume() (已過時)配合 Suspend,同樣不建議
優先權Priority 屬性Highest/AboveNormal/Normal/BelowNormal/Lowest,OS 不保證遵守
等待結束Join()阻塞呼叫執行緒直到目標執行緒結束
檢查存活IsAlive執行緒是否仍在執行

完整範例:主執行緒與工作執行緒交替


using System;
using System.Threading;

public class ThreadExample
{
    // 工作執行緒進入點
    public static void ThreadProc()
    {
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine("ThreadProc: {0}", i);
            Thread.Sleep(0); // 讓出時間片
        }
    }

    public static void Main()
    {
        Console.WriteLine("Main thread: Start a second thread.");
        Thread t = new Thread(new ThreadStart(ThreadProc));
        t.Start();
        // Thread.Sleep(0); // 取消註解可觀察調度差異

        for (int i = 0; i < 4; i++)
        {
            Console.WriteLine("Main thread: Do some work.");
            Thread.Sleep(0);
        }

        Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
        t.Join(); // 等待工作執行緒結束
        Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end.");
        Console.ReadLine();
    }
}

輸出結果範例


Main thread: Start a second thread.
Main thread: Do some work.
ThreadProc: 0
Main thread: Do some work.
ThreadProc: 1
Main thread: Do some work.
ThreadProc: 2
Main thread: Do some work.
ThreadProc: 3
Main thread: Call Join(), to wait until ThreadProc ends.
ThreadProc: 4
ThreadProc: 5
ThreadProc: 6
ThreadProc: 7
ThreadProc: 8
ThreadProc: 9
Main thread: ThreadProc.Join has returned. Press Enter to end.

現代多線程最佳實務

  1. 避免直接操作 Thread:優先使用 Task/Task<T> (TPL)、async/await、Parallel.ForEach、ThreadPool。
  2. 取消模式:使用 CancellationTokenSource/CancellationToken 協同取代 Abort/Suspend/Resume。
  3. 同步原語:lock、Monitor、Mutex、SemaphoreSlim、ReaderWriterLockSlim、Interlocked、Concurrent 集合。
  4. 非同步 I/O:檔案、網路、資料庫操作使用 xxxAsync 方法,釋放執行緒等待 I/O 完成。
  5. UI 執行緒同步:WinForms 用 Control.Invoke/BeginInvoke,WPF 用 Dispatcher.Invoke,ASP.NET Core 無 UI 執行緒問題。

結語

理解 Thread 基礎行為是進階併發程式設計的基石。現代 .NET 開發應以 Task 為核心抽象,配合 async/await 撰寫可讀、可維護、高擴充性的非同步程式碼。本文範例展示的 Join、Sleep(0) 讓出時間片、執行緒交替輸出,有助於建立正確的執行緒調度心智模型。

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