码迷,mamicode.com
首页 > 其他好文 > 详细

Thread系列——Thread.Sleep(0)

时间:2015-11-11 19:08:54      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

由于Cpu资源是有限的,所以进程中的多个线程要抢占Cpu,这也导致进程中的多个线程交替执行。

Thread.Sleep() 本身的含义是当前线程挂起一定时间。

Thread.Sleep(0) MSDN上的解释是挂起此线程能使其他等待线程执行。这样的解释容易导致误解,我们可以这样理解,其实是让当前线程挂起,使得其他线程可以和当前线程再次的抢占Cpu资源。

代码示例:

 1 代码
 2 
 3  static void Main(string[] args)
 4         {
 5             Console.WriteLine("Now main thread begin");
 6             Program p=new Program();
 7             Thread t = new Thread(new ThreadStart(p.ThreadProc));
 8             t.Start();
 9             for (int i = 0; i < 10; i++)
10             {
11                 Console.WriteLine("Main Thread:{0}",i);
12                 Thread.Sleep(0);//这个的意思只不过是让当前线程停顿一下,使得其他线程和他再次重新抢占资源
13             }
14             Console.Read();
15         }
16        void ThreadProc()
17         {
18             for (int i = 0; i < 10; i++)
19             {
20                 Console.WriteLine("ThreadProc:{0}",i);
21             }
22         }

 

执行结果:

技术分享

可以看到 当主线程执行了一次循环时,Sleep(0)了一下,使得资源重新在两个线程中分配了一下。另一个线程抢占到资源并执行。

 

再执行一下,看下结果:

技术分享

可以看到 这次重新分配资源时,先是主线程抢到了资源执行一段时间,之后是另一个线程执行。

从执行结果可以看出,Thread.Sleep(0) 的真正作用,同时也可以看出多线程之间是交替执行的。

Thread系列——Thread.Sleep(0)

标签:

原文地址:http://www.cnblogs.com/qidaiymm/p/4956814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!