1. 线程(Thread)
线程是程序中执行的最小单位,C# 提供了 System.Threading.Thread
类来创建和控制线程。
基本使用步骤
- 创建
Thread
对象:实例化Thread
类,构造函数需要传入一个ThreadStart
或ParameterizedThreadStart
委托,用于指定线程要执行的方法。 - 启动线程:调用
Thread
对象的Start
方法来启动线程。 - 控制线程:可以使用
Join
方法等待线程执行完毕,使用Sleep
方法让线程暂停执行。
using System;
using System.Threading;
class Program
{
static void Main()
{
// 创建一个新线程,并指定要执行的方法
Thread newThread = new Thread(ThreadMethod);
// 启动线程
newThread.Start();
// 主线程继续执行
for (int i = 0; i < 3; i++)
{
Console.WriteLine("主线程执行: " + i);
Thread.Sleep(100);
}
// 等待新线程执行完毕
newThread.Join();
Console.WriteLine("主线程结束");
}
static void ThreadMethod()
{
for (int i = 0; i < 3; i++)
{
Console.WriteLine("新线程执行: " + i);
Thread.Sleep(100);
}
}
}
代码解释
Thread newThread = new Thread(ThreadMethod);
:创建一个新的线程对象,指定线程要执行的方法为ThreadMethod
。newThread.Start();
:启动新线程。newThread.Join();
:主线程等待新线程执行完毕。
2. 线程池(ThreadPool)
线程池是一种管理线程的机制,它预先创建一定数量的线程,并将任务分配给这些线程执行,避免了频繁创建和销毁线程带来的开销。
基本使用步骤
- 将任务加入线程池:使用
ThreadPool.QueueUserWorkItem
方法将一个WaitCallback
委托表示的任务加入线程池。 - 任务执行:线程池中的空闲线程会自动获取任务并执行。
using System;
using System.Threading;
class Program
{
static void Main()
{
// 将任务加入线程池
ThreadPool.QueueUserWorkItem(ThreadPoolMethod, "任务参数");
// 主线程继续执行
for (int i = 0; i < 3; i++)
{
Console.WriteLine("主线程执行: " + i);
Thread.Sleep(100);
}
// 等待一段时间,确保线程池任务有足够时间执行
Thread.Sleep(1000);
Console.WriteLine("主线程结束");
}
static void ThreadPoolMethod(object state)
{
string parameter = (string)state;
for (int i = 0; i < 3; i++)
{
Console.WriteLine("线程池线程执行: " + i + ", 参数: " + parameter);
Thread.Sleep(100);
}
}
}
代码解释
ThreadPool.QueueUserWorkItem(ThreadPoolMethod, "任务参数");
:将ThreadPoolMethod
方法表示的任务加入线程池,并传递一个字符串参数。ThreadPoolMethod
方法会在某个线程池线程中执行。