线程池之函数的执行

         static void Main(string[] arg)
        {
            WaitCallback waitCallback;   //回调委托
            waitCallback = new WaitCallback(CallBack);
            try
            {
                System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, "let's go to beijing");
                System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, "let's go to shanghai");
                System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, "好想吃在饼");
                Console.WriteLine("Main thread. Is pool thread: {0}, Hash: {1}",
                                Thread.CurrentThread.IsThreadPoolThread,
                                Thread.CurrentThread.GetHashCode());

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.ReadLine();
        }

        static void CallBack(object state)
        {
            Console.WriteLine("状态:" + state.ToString());

            Console.WriteLine("Processing request '{0}'." +
                             " Is pool thread: {1}, Hash: {2}",
                               (string)state, Thread.CurrentThread.IsThreadPoolThread,
                               Thread.CurrentThread.GetHashCode());


            //加上阻塞延时,使程序回到Main函数继续执行.
            Thread.Sleep(2000);

            System.Console.WriteLine("Finished");


        }
当把Thread.Sleep(2000);替换为:
            int ticks = Environment.TickCount;
            while (Environment.TickCount - ticks < 2000) ;
即关闭线程阻塞,而改用显示循环执行。会有什么样的结果呢?
从运行结果可以看出,第三个线程执行请求,将在第一个执行完后才开始运行。
这是因为,当没有新线程创建时,线程池发现cpu的使用率达到100%,它将会处于阻塞状态,直到有活动的线程。从总体上来说,这种方案较佳,尤其是线程中线程数量过大时,这样能减少线程之间的切换时间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值