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环境会自动结束销毁线程池,为了保证完成线程池里的任务,所以主线程需要等待一段时间。
要饭二维码
