C#面试题更新 2026-08-05

请说明在 C# 中利用 Thread 类开启一个新线程以及终止该线程的常见做法。

编码实现技术原理C#

考察说明

考查对 C# Thread 类基本操作和线程生命周期管理的掌握。

回答思路

  1. 【回答框架 1】启动线程时,需要创建 Thread 对象并传入一个 ThreadStart 委托或 ParameterizedThreadStart 委托,然后调用 Start 方法。ThreadStart 用于无参方法,ParameterizedThreadStart 允许传递一个 object 参数,例如 new Thread(new ParameterizedThreadStart(MyMethod)).Start(data)。
  2. 【回答框架 2】停止线程不应直接调用 Abort 方法,因为这会强制终止并可能导致资源未释放或状态不一致。推荐使用协作式取消:设置一个 volatile bool 标志位或使用 CancellationToken,线程在循环中检查该标志,收到取消信号后自行退出,然后可在主线程调用 Join 等待线程结束。
  3. 【回答框架 3】在实际应用中,还可用 Task 或后台线程配合任务取消机制,但题目限定 Thread 类,所以重点是掌握基于标志位或 CancellationToken 的优雅退出方式。
  4. 【回答框架 4】需要注意线程的优先级、前台线程和后台线程的区别:默认前台线程会阻止进程退出,若希望进程结束时不等待线程,可将 IsBackground 设为 true。
  5. 【关键点 1】启动线程用 new Thread(方法).Start(),有参时用 ParameterizedThreadStart。
  6. 【关键点 2】停止线程优先用标志位或 CancellationToken 协作式取消,避免 Abort。
  7. 【关键点 3】线程退出后用 Join 确保主线程等待完成。
  8. 【关键点 4】前台线程会阻止进程退出,后台线程不会。
  9. 【关键点 5】Abort 会抛 ThreadAbortException,不推荐使用。
  10. 【易错点 1】误用 Abort 强制终止线程,可能造成资源泄漏或数据不一致。
  11. 【易错点 2】忘记设置 IsBackground 导致进程无法正常退出。
  12. 【易错点 3】标志位未用 volatile 声明或未加锁,可能导致线程间可见性问题。