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")}***************");
-
}

浙公网安备 33010602011771号