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%,它将会处于阻塞状态,直到有活动的线程。从总体上来说,这种方案较佳,尤其是线程中线程数量过大时,这样能减少线程之间的切换时间。
{
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%,它将会处于阻塞状态,直到有活动的线程。从总体上来说,这种方案较佳,尤其是线程中线程数量过大时,这样能减少线程之间的切换时间。