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

王朝学院·作者佚名  2016-05-17
窄屏简体版  字體: 小  |  中  |  大  |  超大  

线程系列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);

}

}

○ 用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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航