C# 多线程--线程池的详细介绍


本文摘自PHP中文网,作者零下一度,侵删。

线程池System.Threading.ThreadPool,可用于发送工作项、处理异步I/O、代表其它线程等待以及处理计时器。基本用法:

1

2

3

4

5

6

7

8

public void Main()

{

    ThreadPool.QueueUserWorkItem(JobForAThread); // 将某工作交给线程池}void JobForAThread(object state) // 线程要执行的工作:满足 委托WaitCallback        {for (int i = 1; i <= 5; i++)

    {

        Console.WriteLine("Running Thread {0},Step {1}", Thread.CurrentThread.ManagedThreadId, i);

        Thread.Sleep(500);

    }

}

在执行 ThreadPool.QueueUserWorkItem() 方法后,处理器就会自动在池中选择一个线程来处理“工作内容”。

1.如果线程池还没有运行,就会创建一个线程池,并启动第一个线程。

2.如果线程池已经在运行,且至少有一个空闲的线程,线程池就会把改“工作内容”交给这个空闲的线程来处理。

3.如果当时线程池没有空闲的线程,该工作就会处于等待状态,直到有空闲线程来处理它。

过 ThreadPool.GetMaxThreads() 方法来 检索可以同时处于活动状态的线程池请求的数目。

1

2

3

int vWorkerThreads; int vCompletionPortThreads;

ThreadPool.GetMaxThreads(out vWorkerThreads, out vCompletionPortThreads);

Console.WriteLine("池中辅助线程的最大数{0},池中异步 I/O 线程的最大数{1}", vWorkerThreads, vCompletionPortThreads);

可以通过 ThreadPool.SetMaxThreads() 方法设置可以同时处于活动状态的线程池请求的数目。

ThreadPool.SetMaxThreads(5, 4);

但是,不能将辅助线程的数目或异步I/O完成线程的数目设置位 小于 计算机处理器的数目。线程池使用很简单,但又一些限制:

1.线程池中的所有线程都是后台线程。如果进程的所有前台线程都结束了,所有后台线程就会停止。不能把入池的线程改为前台线程。

2.不能给入池的线程设置优先级或名称。

3.入池的线程只能用于时间较短的任务。如果线程要一直运行,就应该使用Thread类创建一个线程。

JobForAThread() 工作任务传递参数 object state,调用:

1

2

3

4

5

6

7

8

9

10

public void Main()

{

    ThreadPool.QueueUserWorkItem(JobForAThread,"这是传递给工作内容的参数"); // 添加工作的同时,传递参数Console.ReadKey(); // 让主线程等待,否则“一闪而过”        }void JobForAThread(object state)

{

    Console.WriteLine("收到信息:{0}", (string)state); // 处理传进来的数据for (int i = 1; i <= 5; i++)

    {              

        Console.WriteLine("Running Thread {0},Step {1}", Thread.CurrentThread.ManagedThreadId, i);

        Thread.Sleep(500);

    }

}

简单的控制操作

阅读剩余部分

相关阅读 >>

c#中关于匿名委托和lambda表达式的使用详解

详解.net core使用socket与树莓派进行通信

.net core中遇到的一些坑的图文详解

c#中方向键与回车键切换控件焦点的两种方法

c#实现操作字符串的方法总结

比较c#和java中面向对象语法的区别

.net是否真的被国内市场嫌弃?

.net添加时间戳防止重放攻击

c# arraylistd的长度问题解决

.net core如何动态调用泛型解决方法

更多相关阅读请进入《csharp》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...