C# 多线程之间对比

多线程实现与对比

以下展示三种常见的多线程实现方式:Thread类、ThreadPoolTask,并附带性能对比分析。


基础线程(Thread类)
csharp 复制代码
using System;
using System.Threading;

public class ThreadExample
{
    public static void Run()
    {
        Thread thread = new Thread(() => 
        {
            Console.WriteLine($"Thread ID: {Thread.CurrentThread.ManagedThreadId}");
            Thread.Sleep(1000); // 模拟耗时操作
        });
        thread.Start();
        thread.Join(); // 等待线程结束
    }
}
  • 特点:手动控制线程生命周期,开销较大,适合长期运行的任务。

线程池(ThreadPool)
csharp 复制代码
using System;
using System.Threading;

public class ThreadPoolExample
{
    public static void Run()
    {
        ThreadPool.QueueUserWorkItem(state => 
        {
            Console.WriteLine($"ThreadPool ID: {Thread.CurrentThread.ManagedThreadId}");
            Thread.Sleep(1000);
        });
        // 注意:ThreadPool无需手动等待
    }
}
  • 特点:复用线程减少开销,但无法控制线程优先级或取消任务。

任务并行库(Task)
csharp 复制代码
using System;
using System.Threading.Tasks;

public class TaskExample
{
    public static async Task Run()
    {
        Task task = Task.Run(() => 
        {
            Console.WriteLine($"Task ID: {Thread.CurrentThread.ManagedThreadId}");
            Thread.Sleep(1000);
        });
        await task; // 异步等待
    }
}
  • 特点:支持异步/等待模式,可取消任务和链式操作,现代推荐方式。

性能与适用场景对比

方法 启动开销 线程控制 任务取消 返回值支持 适用场景
Thread 完全控制 手动实现 需要精细控制的长期任务
ThreadPool 不支持 短期/高频小任务
Task 部分控制 支持 支持 异步编程/复杂任务流

扩展建议
  • 异步编程 :优先选择Task配合async/await
  • 资源敏感场景 :高频短任务使用ThreadPool
  • 调试工具 :使用Parallel.ForEach简化数据并行操作。
相关推荐
古法安卓4 小时前
Android-日志系统源码解析
android·java·android studio
小夏coding5 小时前
从"一把梭"到"精妙拆解" —— 滑动窗口计时框架的设计演进
java·后端
MacroZheng6 小时前
同事问我:"Claude Code经常失忆,不怕它把项目搞炸?",我:"怕,三个Markdown文件给它装个永不丢失的外置大脑!"
java·人工智能·后端
十年Java程序媛8 小时前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
xiaoqiMikko8 小时前
有人在搜一个不存在的 Tomcat 版本
java·tomcat
JustCheng8 小时前
Dispacher(1/2)深入解析-详细使用
c#
用户31268748772011 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang12 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing12 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员
吃饱了得干活12 小时前
一篇讲清楚Spring Boot:自动装配、启动器、过滤器、拦截器、设计模式
java·spring boot·后端