线程池(ThreadPool)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 线程池(ThreadPool)

线程池(ThreadPool)

 2017/7/23 5:31:12  --许多--  程序员俱乐部  我要评论(0)
  • 摘要:线程池使用起来很简单,但它有一些限制:线程池中的所有线程都是后台线程。如果进程的所有前台线程都结束了,所有的后台线程就会停止。不能把入池的线程改为前台线程。不能给入池的线程设置优先级或名称。对于COM对象,入池的所有线程都是多线程单元线程。许多COM对象都需要单线程单元线程。入池的线程只能用于时间较短的任务。如果线程要一直运行(如Word的拼写检查器线程),就应使用Thread类创建一个线程。代码示例:classThreadPoolDemo{publicstaticvoidstart()
  • 标签:thread 线程

线程池使用起来很简单,但它有一些限制:

  • 线程池中的所有线程都是后台线程。如果进程的所有前台线程都结束了,所有的后台线程就会停止。不能把入池的线程改为前台线程。
  • 不能给入池的线程设置优先级或名称。
  • 对于COM对象,入池的所有线程都是多线程单元线 程。许多COM对象都需要单线程单元线程。
  • 入池的线程只能用于时间较短的任务。如果线程要一直运行(如 Word的拼写检查器线程),就应使用 Thread类创建一个线程。

代码示例:

 

class="code_img_closed" src="/Upload/Images/2017072305/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('91f81194-2ed1-49cb-af12-c6eb91db230b',event)" src="/Upload/Images/2017072305/2B1B950FA3DF188F.gif" alt="" />
class ThreadPoolDemo
    {
        public static void start()
        {
            int workerThreads, completionPortThreads;
            //设置线程最大值
            ThreadPool.SetMaxThreads(5, 5);
            ////设置线程最小值
            ThreadPool.SetMinThreads(2, 2);
            //检索线程池在新请求预测中维护的空闲线程数
            ThreadPool.GetMinThreads(out workerThreads, out completionPortThreads);
            Console.WriteLine("workerThreads:" + workerThreads);
            Console.WriteLine("completionPortThreads:" + workerThreads);
            //绑定线程,当有可用线程时执行。
            ThreadPool.QueueUserWorkItem(WaitCallback, "第1个");
            ThreadPool.QueueUserWorkItem(WaitCallback, "第2个");
            ThreadPool.QueueUserWorkItem(WaitCallback, "第3个");
            ThreadPool.QueueUserWorkItem(WaitCallback, "第4个");
            ThreadPool.QueueUserWorkItem(WaitCallback, "第5个");
            ThreadPool.QueueUserWorkItem(WaitCallback, "第6个");
            ThreadPool.QueueUserWorkItem(WaitCallback, "第7个");
            ThreadPool.QueueUserWorkItem(WaitCallback, "第8个");
            ThreadPool.QueueUserWorkItem(WaitCallback, "第9个");
            ThreadPool.QueueUserWorkItem(WaitCallback, "第10个");
        }
        static void WaitCallback(object state)
        {
            Console.WriteLine("线程调用" + state);
            int workerThreads, completionPortThreads;
            //检测可用线程和io线程数
            ThreadPool.GetAvailableThreads(out workerThreads, out completionPortThreads);
            Console.WriteLine("workerThreads:" + workerThreads);
            Console.WriteLine("completionPortThreads:" + workerThreads);
            Thread.Sleep(2000);
            if ("第2个" == state.ToString())
            {
                Thread.Sleep(6000);
            }
            Console.WriteLine(state + "调用结束");
        }
    }
View Code

 

发表评论
用户名: 匿名