线程池的简单实用
C# 线程池ThreadPool的用法:
最近,因为做项目的关系,用到了很多和线程有关的东西。由于以前对线程只是有一个概括的了解,并没有深入的研究过,所以在面对一些问题时,总会感觉到有心无力,为此也花费了大量的时间和精力。为了巩固这方面的知识,特写此文章和大家分享。
1 最简单的线程例子
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Begin in Main");
Thread thread = new Thread(new ThreadStart(ThreadInvoke));
//启动线程
thread.Start();
//将当前线程挂起200毫秒
Thread.Sleep(200);
Console.WriteLine("End in Main");
}
static void ThreadInvoke()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Execute in ThreadInvoke");
//每隔100毫秒,循环一次
Thread.Sleep(100);
}
}
}
输出结果:
"End in Main"并没有在ThreadInvoke()方法中所有代码执行完之后才输出。
由此可见Main方法和ThreadInvoke是并行执行的。
2 使用线程池
上面介绍了只是一个最简单的有关线程线程的例子,但在实际开发中使用的线程往往是大量的和更为复杂的,这时,每次都创建线程、启动线程。从性能上来讲,这样做并不理想(因为每使用一个线程就要创建一个,需要占用系统开销);从操作上来讲,每次都要启动,比较麻烦。为此引入的线程池的概念。
有关线程池的解释请参考:
把上面的代码修改之后如下:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Begin in Main");
//Thread thread = new Thread(new ThreadStart(ThreadInvoke));
////启动线程
//thread.Start();
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadInvoke));
//将当前线程挂起200毫秒
Thread.Sleep(200);
Console.WriteLine("End in Main");
Thread.Sleep(3000);
}
static void ThreadInvoke(Object param)
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Execute in ThreadInvoke");
//每隔100毫秒,循环一次
Thread.Sleep(100);
}
}
}

浙公网安备 33010602011771号