在 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 | 设置或获取线程优先级(如 |
CurrentThread | 获取当前正在执行的线程对象 |
五、前台线程 vs 后台线程
默认情况下,新创建的线程是前台线程,应用程序必须等待所有前台线程完成才会退出。
设置为后台线程只需一行代码:
thread.IsBackground = true;
⚠️ 注意:后台线程不会阻止程序退出,适用于长时间运行但不影响主程序关闭的任务。
六、线程同步与资源共享
多个线程访问共享资源时可能会引发竞争条件(Race Condition),需要进行同步控制。
1. 使用 lock
锁定对象
private static object lockObj = new object();
static void SafeCounter()
{
lock (lockObj)
{
// 安全访问共享资源
}
}
2. 使用 Monitor
、Mutex
、Semaphore
等高级同步机制
这些类提供了更灵活的线程同步方式,适合复杂场景。
七、线程池简介
虽然 Thread
类功能强大,但频繁创建和销毁线程开销较大。此时可以使用 线程池(ThreadPool) 来复用线程资源:
ThreadPool.QueueUserWorkItem(state => {
Console.WriteLine("来自线程池的任务");
});
✅ 推荐用于执行轻量任务,不适合长时间阻塞的操作。
八、线程异常处理
线程内部抛出的异常不能直接在主线程捕获,必须在线程方法中自行处理:
try
{
// 线程工作逻辑
}
catch (Exception ex)
{
Console.WriteLine($"线程发生异常: {ex.Message}");
}
❗未处理的线程异常会导致整个应用程序崩溃。
九、总结
Thread
类是 C# 多线程编程的基础工具,适合对线程有精细控制需求的场景。但在实际开发中,我们更推荐使用更高层次的抽象(如 Task
、Parallel
、async/await
)来简化并发编程。
📌 掌握 Thread
类,是理解 .NET 并行编程的第一步。
📬 欢迎关注我的公众号,获取更多 C#/.NET 编程干货与实战技巧!
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏并分享给更多开发者!让我们一起学习,共同进步!