C#线程池(ThreadPool)使用笔记


关键词

C#线程池(ThreadPool)使用笔记

摘要

C#线程池(ThreadPool)使用笔记

以前写线程,都是一个一个的Thread去创建,后来翻看一本书时发现了线程池,也就是ThreadPool这个东东。本着一边学习,一边记录的原则,把ThreadPool相关的一些知识做了收集。

有关线程池的解释,有个牛人写了一篇文章:
http://www.cnblogs.com/JeffreyZhao/archive/2009/07/22/thread-pool-1-the-goal-and-the-clr-thread-pool.html

我在网上找一个线程池的例子,例子大致要展示的意思是主线程和线程池启动的线程是并行的,也就是说在启动线程之后的主程序的代码有可能比线程里面的代码优先执行

C#线程池(ThreadPool)使用笔记

以前写线程,都是一个一个的Thread去创建,后来翻看一本书时发现了线程池,也就是ThreadPool这个东东。本着一边学习,一边记录的原则,把ThreadPool相关的一些知识做了收集。

有关线程池的解释,有个牛人写了一篇文章:
http://www.cnblogs.com/JeffreyZhao/archive/2009/07/22/thread-pool-1-the-goal-and-the-clr-thread-pool.html

我在网上找一个线程池的例子,例子大致要展示的意思是主线程和线程池启动的线程是并行的,也就是说在启动线程之后的主程序的代码有可能比线程里面的代码优先执行,代码如下:
class Program
{
   static void Main(string[] args)
   {
       Console.WriteLine("Begin in Main");

       ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadDo), 1);
       Thread.Sleep(300);
       ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadDo), 2);

       Thread.Sleep(300);
       Console.WriteLine("End in Main");

       Thread.Sleep(5000);
   }

   static void ThreadDo(Object o)
   {
       for (int i = 0; i < 5; i++)
       {
           Console.WriteLine("[Thread " + (int)o + "] Execute in ThreadDo");
           Thread.Sleep(100);
       }
   }
}

程序中使用ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadDo), 1)这样的语句来创建并启动一个新线程。,方法ThreadDo有个参数(Object o),这个可以为线程的回调函数传一些参数进来。比如在多个线程并行处理时,洪哥会把每个线程单独编一个ID号,然后把线程的这个IDC号传到线程的回调函数中。
在Main结束之间加了Thread.Sleep(5000); 这句话的作用是当Main方法结束后,.Net环境会自动结束销毁线程池,为了保证完成线程池里的任务,所以主线程需要等待一段时间。


 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权

本文属于“洪哥笔记”原创文章,转载请注明来源地址:C#线程池(ThreadPool)使用笔记:http://www.splaybow.com/post/csharp-threadpool.html

如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« ASP.NET(C#)获取网页HTML源文件 ASP.NET连接Access数据库 »