程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Thread:多线程编程基础详解

balukai 2025-05-25 10:43:33 文章精选 11 ℃

在 C# 开发中,多线程(Multithreading) 是提升程序性能、实现并发执行的重要手段。而 System.Threading.Thread 类是 .NET 中用于创建和管理线程的核心类之一。

本文将详细介绍 Thread 类的基本用法、常见操作以及注意事项,帮助你快速掌握 C# 多线程编程的基础。


一、什么是 Thread 类?

Thread 类位于 System.Threading 命名空间中,用于表示操作系统中的一个独立执行线程。通过它,我们可以创建并控制线程的生命周期,设置优先级,处理异常等。

简单来说,每个 Thread 实例代表一个正在运行或可以运行的线程


二、创建与启动线程

1. 创建线程

使用 new Thread(ThreadStart)new Thread(ParameterizedThreadStart) 构造函数创建线程对象:

using System;
using System.Threading;

classProgram
{
static void Main()
{
Thread thread = new Thread(DoWork);
thread.Start();
}

static void DoWork()
{
Console.WriteLine("线程正在运行...");
}
}

ThreadStart:无参数的方法委托
ParameterizedThreadStart:带一个 object 参数的方法委托

2. 传递参数

使用 Start(object) 方法传参:

thread.Start("Hello from main");

接收参数的方法需为 ParameterizedThreadStart 类型:

static void DoWorkWithParam(object data)
{
Console.WriteLine($"收到参数: {data}");
}

三、线程状态与生命周期

线程从创建到终止会经历多个状态,可以通过 Thread.ThreadState 属性查看当前状态:

状态
含义
Unstarted
线程已创建但尚未启动
Running
线程正在运行
WaitSleepJoin
线程正在等待、休眠或加入另一个线程
Stopped
线程已停止
Aborted
线程被中止

四、常用方法与属性

方法/属性
描述
Start()
启动线程
Join()
阻塞调用线程,直到该线程执行完毕
Sleep(int milliseconds)
让当前线程休眠指定毫秒数
Abort()
强制终止线程(不推荐使用)
IsAlive
判断线程是否处于活动状态
Priority
设置或获取线程优先级(如 Highest, Normal, Lowest
CurrentThread
获取当前正在执行的线程对象

五、前台线程 vs 后台线程

默认情况下,新创建的线程是前台线程,应用程序必须等待所有前台线程完成才会退出。

设置为后台线程只需一行代码:

thread.IsBackground = true;

注意:后台线程不会阻止程序退出,适用于长时间运行但不影响主程序关闭的任务。


六、线程同步与资源共享

多个线程访问共享资源时可能会引发竞争条件(Race Condition),需要进行同步控制。

1. 使用 lock 锁定对象

private static object lockObj = new object();

static void SafeCounter()
{
lock (lockObj)
{
// 安全访问共享资源
}
}

2. 使用 MonitorMutexSemaphore 等高级同步机制

这些类提供了更灵活的线程同步方式,适合复杂场景。


七、线程池简介

虽然 Thread 类功能强大,但频繁创建和销毁线程开销较大。此时可以使用 线程池(ThreadPool) 来复用线程资源:

ThreadPool.QueueUserWorkItem(state => {
Console.WriteLine("来自线程池的任务");
});

推荐用于执行轻量任务,不适合长时间阻塞的操作。


八、线程异常处理

线程内部抛出的异常不能直接在主线程捕获,必须在线程方法中自行处理:

try
{
// 线程工作逻辑
}
catch (Exception ex)
{
Console.WriteLine($"线程发生异常: {ex.Message}");
}

未处理的线程异常会导致整个应用程序崩溃。


九、总结

Thread 类是 C# 多线程编程的基础工具,适合对线程有精细控制需求的场景。但在实际开发中,我们更推荐使用更高层次的抽象(如 TaskParallelasync/await)来简化并发编程。

掌握 Thread 类,是理解 .NET 并行编程的第一步。






最近发表
标签列表