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")}***************");
  • }
posted @   ¥东方不败  阅读(1320)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示