C#多线程之线程池(ThreadPool)
作者:農碼一生 时间:2022-05-02 07:12:15
一、简介
前面介绍了平时用到的大多数的多线程的例子,但在实际开发中使用的线程往往是大量的和更为复杂的,这时,每次都创建线程、启动线程。从性能上来讲,这样做并不理想(因为每使用一个线程就要创建一个,需要占用系统开销);从操作上来讲,每次都要启动,比较麻烦。为此引入的线程池的概念。
好处:
1.减少在创建和销毁线程上所花的时间以及系统资源的开销
2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。
在什么情况下使用线程池?
1.单个任务处理的时间比较短
2.需要处理的任务的数量大
线程池最多管理线程数量=“处理器数 * 250”。也就是说,如果您的机器为2个2核CPU,那么CLR线程池的容量默认上限便是1000。通过线程池创建的线程默认为后台线程,优先级默认为Normal。
二、代码
案例一:
class Program
{
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadMethod1), new object()); //参数可选
Console.ReadKey();
}
public static void ThreadMethod1(object val)
{
for (int i = 0; i <= 10000; i++)
{
if (i % 1000 == 0)
{
if (string.IsNullOrEmpty(Thread.CurrentThread.Name) )
{
Thread.CurrentThread.Name = "Thred_" + i;
}
Console.WriteLine("循環{0}次的線程的線程名稱為:{1}",i,Thread.CurrentThread.Name);
}
}
}
}
运行结果:
案例二:
class Program
{
public static void Main()
{
// Queue the task.
ThreadPool.QueueUserWorkItem(ThreadProc);
Console.WriteLine("Main thread does some work, then sleeps.");
Thread.Sleep(1000);
Console.WriteLine("Main thread exits.");
Console.ReadKey();
}
// This thread procedure performs the task.
static void ThreadProc(Object stateInfo)
{
// No state object was passed to QueueUserWorkItem, so stateInfo is null.
Console.WriteLine("Hello from the thread pool.");
}
}
运行结果:
来源:https://www.cnblogs.com/wml-it/p/14822883.html
标签:C#,多线程,线程池,ThreadPool
0
投稿
猜你喜欢
Android中Retrofit 2.0直接使用JSON进行数据交互
2022-01-08 07:22:46
IDEA 设置显示内存的使用情况和内存回收的方法
2023-10-08 15:51:25
Java接入支付宝授权第三方登录的完整步骤
2023-01-05 01:13:54
Java设计模式之命令模式详解
2023-11-15 21:18:43
c# 应用事务的简单实例
2021-11-24 23:48:34
Android应用中ListView利用OnScrollListener分页加载数据
2021-11-06 16:01:04
activemq整合springboot使用方法(个人微信小程序用)
2023-07-08 22:29:55
Java可重入锁的实现原理与应用场景
2023-03-27 20:21:54
Java Exception 捕获和显示实例详解
2022-07-05 22:41:09
java 实现文件夹的拷贝实例代码
2023-01-04 10:19:28
Android使用元数据实现配置信息的传递方法详细介绍
2023-11-02 15:25:48
Javaweb动态开发最重要的Servlet详解
2023-04-09 20:11:17
详解C#中的属性和属性的使用
2023-12-03 09:51:39
JavaWeb中Servlet的深入理解
2021-11-04 17:06:58
C# winform 模拟键盘输入自动接入访问网络的实例
2022-01-01 19:20:10
Android控件之SeekBar的用法总结
2022-10-25 00:15:38
详解Mybatis中常用的约束文件
2023-11-28 08:02:17
Java 深入探究讲解简单工厂模式
2022-12-25 12:02:06
Unity3D使用Shader实现腐蚀消失
2022-01-07 20:57:59
简单实现Android倒计时效果
2022-03-26 01:58:14