- 创建线程需要时间,如果有很多小任务需要完成,则可以事先创建许多线程,需要时随时取用。
- 系统提供ThreadPool类管理线程。这个类会在需要时增减线程池中线程的数目,直到达到最大线程数。
- 线程池中最大线程数是可配置的,在双核CPU中,默认设置为1023个工作线程和1000个IO线程。
- 线程池中的线程都是后台线程,不能修改为前台线程,也不能给入池的线程设置优先级或名称。
- 线程池中的线程只能用于时间比较短的任务,如果线程一直运行,就不适合用线程池中的线程,应该用Thread类创建一个线程。
通过 ThreadPool中的静态方法QueueUserWorkItem,可以取一个工作线程。此方法的参数为一个回调函数及传入回调函数的数据。
Thread.CurrentThread.ManagedThreadId用于获取当前线程的ID。Thread.Sleep(1000)使当前线程休眠1000毫秒。
class Program
{
static void DownLoad(object str)
{
Console.WriteLine("DownLoad Begin ID = " + Thread.CurrentThread.ManagedThreadId + " " + str);
Thread.Sleep(1000);
Console.WriteLine("DownLoad End");
}
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(DownLoad, "人民日报");
ThreadPool.QueueUserWorkItem(DownLoad, "商业周刊");
ThreadPool.QueueUserWorkItem(DownLoad, "华尔街日报");
ThreadPool.QueueUserWorkItem(DownLoad, "纽约时报");
ThreadPool.QueueUserWorkItem(DownLoad, "华盛顿邮报");
ThreadPool.QueueUserWorkItem(DownLoad, "鹦鹉螺");
Console.ReadKey();
}
}
运行结果