C#线程池
二、线程池ThreadPool
线程池ThreadPool是.NET框架在2.0的时候推出的,线程池可以重用线程,避免重复的创建和销毁。
1、QueueUserWorkItem()方法
- QueueUserWorkItem()方法用来启动一个多线程。
- ThreadPool.QueueUserWorkItem(p => this.DoSomethingLong("btnTrheadPool_Click"));
2、GetMaxThreads()方法
- 1、GetMaxThreads()用来获取线程池中最多可以有多少个辅助线程和最多有多少个异步线程。
- 2、ThreadPool.GetMaxThreads(out int workerThreads, out int completionPortThreads);
- 3、Console.WriteLine($"GetMaxThreads workerThreads={workerThreads} completionPortThreads={completionPortThreads}");
3、GetMinThreads()方法
- 1、GetMinThreads()用来获取线程池中最少可以有多少个辅助线程和最少有多少个异步线程。
- 2、ThreadPool.GetMinThreads(out int workerThreads, out int completionPortThreads);
- 3、Console.WriteLine($"GetMinThreads workerThreads={workerThreads} completionPortThreads={completionPortThreads}");
4、SetMaxThreads()和SetMinThreads()
1、SetMaxThreads()和SetMinThreads()分别用来设置线程池中最多线程数和最少线程数。
-
private void btnTrheadPool_Click(object sender, EventArgs e)
-
{
-
Console.WriteLine($"****************btnThreadPool_Click Start {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}***************");
-
// 启动多线程
-
ThreadPool.QueueUserWorkItem(p => this.DoSomethingLong("btnTrheadPool_Click"));
-
Console.WriteLine("输出系统默认最多线程数和最少线程数");
-
// 最大线程
-
ThreadPool.GetMaxThreads(out int workerMaxThreads, out int completionPortMaxThreads);
-
Console.WriteLine($"GetMaxThreads workerThreads={workerMaxThreads} completionPortThreads={completionPortMaxThreads}");
-
// 最小线程
-
ThreadPool.GetMinThreads(out int workerMinThreads, out int completionPortMinThreads);
-
Console.WriteLine($"GetMinThreads workerThreads={workerMinThreads} completionPortThreads={completionPortMinThreads}");
-
Console.WriteLine("************设置最多线程数和最少线程数****************");
-
// 设置最大线程
-
ThreadPool.SetMaxThreads(16, 16);
-
// 设置最小线程
-
ThreadPool.SetMinThreads(8, 8);
-
Console.WriteLine("输出修改后的最多线程数和最少线程数");
-
ThreadPool.GetMaxThreads(out int workerThreads, out int completionPortThreads);
-
Console.WriteLine($"GetMaxThreads workerThreads={workerThreads} completionPortThreads={completionPortThreads}");
-
ThreadPool.GetMinThreads(out int workerEditThreads, out int completionPortEditThreads);
-
Console.WriteLine($"GetMinThreads workerThreads={workerEditThreads} completionPortThreads={completionPortEditThreads}");
-
Console.WriteLine($"****************btnThreadPool_Click End {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}***************");
-
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix