简述C#多线程

news/2025/2/11 15:30:28/

目录

一、Thread 类

1、核心功能

2、使用场景

3、示例代码

4、注意事项

二、ThreadPool 类

1、核心功能

2、使用场景

3、示例代码

4、注意事项

三、Task 类

1、核心功能

2、使用场景

3、示例代码

4、注意事项

四、Parallel 类

1、核心功能

2、使用场景

3、示例代码

4、注意事项

五、async 和 await

1、核心功能

2、使用场景

3、示例代码

4、注意事项

六、线程同步

1、核心功能

2、使用场景

3、示例代码

4、注意事项

七、总结


在C#中,多线程编程涉及多个类和机制,每个类都有其特定的用途和适用场景。以下是对每个类的详细解析,包括其核心功能、使用场景以及示例代码。

一、Thread 类

Thread 类是.NET中最基础的多线程实现方式。它允许你显式地创建和控制线程。

1、核心功能

  • 创建和管理线程。

  • 启动、暂停、恢复和终止线程。

  • 设置线程的优先级和状态。

2、使用场景

  • 需要显式控制线程的生命周期。

  • 执行长时间运行的任务。

  • 需要设置线程的优先级或状态。

3、示例代码

using System;
using System.Threading;class Program
{static void Main(){// 创建一个新线程Thread thread = new Thread(DoWork);thread.Start(); // 启动线程// 主线程继续执行for (int i = 0; i < 5; i++){Console.WriteLine("Main thread: " + i);Thread.Sleep(500);}thread.Join(); // 等待线程结束}static void DoWork(){for (int i = 0; i < 5; i++){Console.WriteLine("Worker thread: " + i);Thread.Sleep(500);}}
}

4、注意事项

  • 线程的创建和销毁开销较大。

  • 需要手动管理线程的生命周期。

  • 线程过多可能导致资源耗尽。

二、ThreadPool 类

ThreadPool 是一个线程池,它管理着一组后台线程,适用于执行短期的任务。

1、核心功能

  • 自动管理线程的创建和回收。

  • 适用于短期的、不需要显式控制的任务。

2、使用场景

  • 执行短期的、不需要长时间运行的任务。

  • 减少线程创建和销毁的开销。

3、示例代码

using System;
using System.Threading;class Program
{static void Main(){// 将任务加入线程池ThreadPool.QueueUserWorkItem(DoWork);// 主线程继续执行for (int i = 0; i < 5; i++){Console.WriteLine("Main thread: " + i);Thread.Sleep(500);}}static void DoWork(object state){for (int i = 0; i < 5; i++){Console.WriteLine("Worker thread: " + i);Thread.Sleep(500);}}
}

4、注意事项

  • 无法控制线程池中的线程。

  • 不适合长时间运行的任务。


http://www.ppmy.cn/news/1571186.html

相关文章

【机器学习与数据挖掘实战】案例13:基于BP神经网络模型的家用热水器用户行为分析与事件识别

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支&#xff0c;专注于让计算机系统通过数据学习和改进。它利用统计和计算方法&#xff0c;使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数…

基于GA遗传优化的电动汽车光储充电站容量配置算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于GA遗传优化的电动汽车光储充电站容量配置算法matlab仿真。通过运行基于 GA 的光储充电站容量配置算法&#xff0c;得到了最优的容量配置方案。与传统的容量配…

IntelliJ IDEA使用经验(十三):使用Git克隆github的开源项目

文章目录 问题背景办法1、设置git代理&#xff1b;2、再次克隆项目&#xff1b;3、再次按常规方式进行git克隆即可。 问题背景 由于github在国外&#xff0c;很多时候我们在使用idea克隆开源项目的时候&#xff0c;没办法检出&#xff0c;提示 连接重置。 办法 1、设置git代…

【故障处理】ORA-19849 ORA-19612 0RA-17627 ORA-03114

【故障处理】ADG duplicate 异常中断ORA-19849 ORA-19612 0RA-17627 ORA-03114 Corrupt block 84629 found during reading backup piece 一、概述二、报错信息三、报错原因四、解决方法五、其他类似报错5.1 报错信息 一、概述 部署adg执行duplicate异常中断&#xff0c;RMAN过…

echarts 鼠标移入柱状图展示手指,移入label 展示箭头

问题描述&#xff1a; 目前官方没有提供分类展示移入样式设置&#xff0c;所以得主动加入移入事件来分别做设置&#xff0c; 关键事件&#xff1a; _this.chartInstancenf.getZr().on(mousemove, (params) > {}&#xff09; 鼠标移入柱状图是有name的&#xff0c;他的nam…

【Kubernetes】常用命令全解析:从入门到实战(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Kubernetes简介 2、安装Kubernetes …

CNN-day7-经典神经网络VGG

day8-经典神经网络VGG VGG的亮点在于它通过堆叠多个卷积层&#xff0c;以小的卷积核和池化层的方式来增加网络深度&#xff0c;从而实现高精度的图像识别。这种方法可以有效地捕获图像中的高级特征&#xff0c;并通过不断拟合训练数据来提高识别准确率。 1 小卷积作用 某层f…

electron.vite 项目创建以及better-sqlite3数据库使用

1.安装electron.vite npm create quick-start/electronlatest中文官网&#xff1a;https://cn.electron-vite.org/ 2. 安装项目依赖 npm i3.修改 electron-builder 配置文件 appId: com.electron.app productName: text33 directories:buildResources: build files:- !**/.v…