在C 中,如何创建并启动⼀个新的线程?请举例说明
发布日期:2025-02-04 22:57 点击次数:54
在 C# 中,可以使用System.Threading.Thread类创建并启动一个新的线程。以下是创建和启动线程的方式以及示例代码:
创建并启动线程的步骤
创建线程对象
创建一个Thread对象,并指定线程运行的方法(委托)。
启动线程使用Thread.Start()方法启动线程。线程方法线程执行的方法必须是无参数方法,或者使用ParameterizedThreadStart传递参数。
示例 1:创建无参数线程
using System;using System.Threading;class Program{ static void Main() { // 创建线程,指定线程运行的方法 Thread thread = new Thread(PrintNumbers); // 启动线程 thread.Start(); // 主线程继续运行 Console.WriteLine("Main thread is running..."); } // 线程运行的方法 static void PrintNumbers() { for (int i = 1; i <= 5; i++) { Console.WriteLine($"Thread: {i}"); Thread.Sleep(500); // 模拟任务执行,暂停 500 毫秒 } }}
输出示例:
Main thread is running...Thread: 1Thread: 2Thread: 3Thread: 4Thread: 5
示例 2:创建带参数的线程
使用ParameterizedThreadStart或 Lambda 表达式为线程传递参数。
方法一:ParameterizedThreadStart
using System;using System.Threading;class Program{ static void Main() { // 创建线程,使用 ParameterizedThreadStart 传递参数 Thread thread = new Thread(PrintMessage); thread.Start("Hello from the thread!"); Console.WriteLine("Main thread is running..."); } // 接收参数的线程方法 static void PrintMessage(object message) { Console.WriteLine($"Thread message: {message}"); }}
方法二:Lambda 表达式
using System;using System.Threading;class Program{ static void Main() { // 使用 Lambda 表达式创建线程 Thread thread = new Thread(() => { Console.WriteLine("Hello from the thread!"); }); thread.Start(); Console.WriteLine("Main thread is running..."); }}
示例 3:使用线程控制(Join 和 IsAlive)
Join
Thread.Join()等待线程执行完成。
using System;using System.Threading;class Program{ static void Main() { Thread thread = new Thread(PrintNumbers); thread.Start(); Console.WriteLine("Waiting for the thread to complete..."); thread.Join(); // 等待线程执行完成 Console.WriteLine("Thread completed."); } static void PrintNumbers() { for (int i = 1; i <= 3; i++) { Console.WriteLine($"Thread: {i}"); Thread.Sleep(500); } }}
IsAlive
检查线程是否仍在运行。
using System;using System.Threading;class Program{ static void Main() { Thread thread = new Thread(PrintNumbers); thread.Start(); while (thread.IsAlive) { Console.WriteLine("Thread is still running..."); Thread.Sleep(200); } Console.WriteLine("Thread has finished."); } static void PrintNumbers() { Thread.Sleep(1000); Console.WriteLine("Thread task completed."); }}
注意事项
线程生命周期
使用Thread.Join()可以等待线程完成。检查Thread.IsAlive可以判断线程是否正在运行。
线程安全多线程访问共享资源时,需使用同步机制(如lock)避免数据竞争。后台线程设置Thread.IsBackground = true将线程标记为后台线程,主线程退出时后台线程会自动终止。推荐使用Task在现代 C# 开发中,推荐使用Task或异步编程模型(async/await),它们提供了更高级的并发编程方式。
总结
通过System.Threading.Thread类,您可以轻松地创建和启动线程,并对其进行控制。然而,在大多数情况下,使用Task或线程池更适合现代应用程序的需求,因为它们提供了更高的抽象和更好的资源管理。