多线程如何控制线程数
时间: 2023-11-16 14:46:03 浏览: 35
C# 多线程可以通过 `ThreadPool` 类来控制线程数。`ThreadPool` 类提供了一个线程池,可以用于执行后台任务。默认情况下,线程池的最大线程数是由操作系统决定的,但是可以通过 `ThreadPool.SetMaxThreads` 方法来设置最大线程数。
下面是一个示例,演示如何使用线程池控制线程数:
```csharp
using System;
using System.Threading;
class Program
{
static void Main()
{
int workerThreads;
int completionPortThreads;
ThreadPool.GetMinThreads(out workerThreads, out completionPortThreads);
Console.WriteLine("最小工作线程数: {0}", workerThreads);
Console.WriteLine("最小完成端口线程数: {0}", completionPortThreads);
// 设置最大线程数
int maxWorkerThreads = 10;
int maxCompletionPortThreads = 10;
ThreadPool.SetMaxThreads(maxWorkerThreads, maxCompletionPortThreads);
ThreadPool.GetMaxThreads(out workerThreads, out completionPortThreads);
Console.WriteLine("最大工作线程数: {0}", workerThreads);
Console.WriteLine("最大完成端口线程数: {0}", completionPortThreads);
// 启动多个任务
for (int i = 0; i < 20; i++)
{
ThreadPool.QueueUserWorkItem(DoWork, i);
}
// 等待所有任务完成
while (ThreadPool.PendingWorkItemCount > 0)
{
Thread.Sleep(100);
}
Console.WriteLine("所有任务已完成。");
}
static void DoWork(object state)
{
Console.WriteLine("执行任务: {0}", state);
Thread.Sleep(1000); // 模拟任务执行时间
}
}
```
解释:
1. 首先,我们通过 `ThreadPool.GetMinThreads` 方法获取线程池的最小线程数,这是操作系统默认的设置。
2. 然后,我们使用 `ThreadPool.SetMaxThreads` 方法设置线程池的最大线程数。
3. 接下来,我们使用 `ThreadPool.QueueUserWorkItem` 方法添加多个任务到线程池中,每个任务都会在一个线程中执行。
4. 最后,我们使用 `while` 循环等待所有任务完成,可以通过 `ThreadPool.PendingWorkItemCount` 属性获取待处理的任务数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)