线程池之函数的执行

来源:互联网 发布:python 数据类型 编辑:程序博客网 时间:2024/05/18 00:04
         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%,它将会处于阻塞状态,直到有活动的线程。从总体上来说,这种方案较佳,尤其是线程中线程数量过大时,这样能减少线程之间的切换时间。
原创粉丝点击