首页 > 学院 > 开发设计 > 正文

线程系列06,通过CLR代码查看线程池及其线程

2019-11-17 02:52:26
字体:
来源:转载
供稿:网友

线程系列06,通过CLR代码查看线程池及其线程

在"线程系列04,传递数据给线程,线程命名,线程异常处理,线程池"中,我们已经知道,每个进程都有一个线程池。可以通过TPL,ThreadPool.QueueUserWorkItem,委托与线程池交互。本篇体验:通过查看CLR代码来观察线程池及其线程。

□ 通过编码查看线程池和线程

使用ThreadPool的静态方法QueueUserWorkItem把线程放入线程池,来看线程池线程和主程序线程的执行情况。

    class PRogram
    {
        static void Main(string[] args)
        {
            Console.WriteLine("主线程开始");
            for (int i = 0; i < 5; i++)
            {
                ThreadPool.QueueUserWorkItem(SayHello, i);
            }
            Console.WriteLine("主线程结束");
        }
        static void SayHello(object arg)
        {
            int n = (int) arg;
            Console.WriteLine("线程{0}接收到的参数是:{1},是否是后台线程:{2}",
                Thread.CurrentThread.ManagedThreadId,
                n,
                Thread.CurrentThread.IsBackground);
        }       
    }

20

○ 用QueueUserWorkItem方法加入线程池的线程是后台线程○ 一旦主线程结束,后台线程随即结束○ 在主程序for语句块中,有2个线程已被创建并执行

让主线程和线程池线程都Sleep一段时间。

   class Program
    {
        static Random r = new Random();
        static void Main(string[] args)
        {
            Console.WriteLine("主线程开始");
            for (int i = 0; i < 5; i++)
            {
                ThreadPool.QueueUserWorkItem(SayHello, i);
            }
            Thread.Sleep(r.Next(250, 500));
            Console.WriteLine("主线程结束");
        }
        static void SayHello(object arg)
        {
            Thread.Sleep(r.Next(250, 50
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表