线程池ThreadPool

  • 创建线程需要时间,如果有很多小任务需要完成,则可以事先创建许多线程,需要时随时取用。
  • 系统提供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();
        }
    }

运行结果

猜你喜欢

转载自blog.csdn.net/liyazhen2011/article/details/81262163