您的位置:首页 > 其它

Thread系列之Thread.Sleep(0)

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

线程这一概念,可以理解成进程中的一个小单元。这个单元是一个独立的执行单元,但是与进程中的其他线程共享进程中的内存单元。

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

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

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

代码示例:

代码

staticvoid Main(string[] args)
{
Console.WriteLine("Now main thread begin");
Program p=new Program();
Thread t =new Thread(new ThreadStart(p.ThreadProc));
t.Start();
for (int i =0; i <10; i++)
{
Console.WriteLine("Main Thread:{0}",i);
Thread.Sleep(0);//这个的意思只不过是让当前线程停顿一下,使得其他线程和他再次重新抢占资源
}
Console.Read();
}
void ThreadProc()
{
for (int i =0; i <10; i++)
{
Console.WriteLine("ThreadProc:{0}",i);
}
}


staticvoid Main(string[] args) { Console.WriteLine("Now main thread begin"); Program p=new Program(); Thread t =new Thread(new ThreadStart(p.ThreadProc)); t.Start(); for (int i =0; i <10; i++) { Console.WriteLine("Main Thread:{0}",i); Thread.Sleep(0);//这个的意思只不过是让当前线程停顿一下,使得其他线程和他再次重新抢占资源 } Console.Read(); } void ThreadProc() { for (int i =0; i <10; i++) { Console.WriteLine("ThreadProc:{0}",i); } }staticvoid Main(string[] args) { Console.WriteLine("Now main thread begin"); Program p=new Program(); Thread t =new Thread(new ThreadStart(p.ThreadProc)); t.Start(); for (int i =0; i <10; i++) { Console.WriteLine("Main Thread:{0}",i); Thread.Sleep(0);//这个的意思只不过是让当前线程停顿一下,使得其他线程和他再次重新抢占资源 } Console.Read(); } void ThreadProc() { for (int i =0; i <10; i++) { Console.WriteLine("ThreadProc:{0}",i); } }

执行结果:



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

再执行一下,看下结果:



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

从执行结果可以看出,Thread.Sleep(0) 的真正作用,同时也可以看出多线程之间是交替执行的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: