阅读目录
一:什么是Thread.Sleep?
二:举例
三:什么时候用线程?
四:使用线程的缺点
一:什么是Thread.Sleep?
1.Thread.Sleep() 本身的含义是将当前线程挂起指定的时间。
2. MSDN的说明:指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。
Thread.Sleep(0) 并非是真的要线程挂起0毫秒,这样显的毫无意义,意义在于这次调用Thread.Sleep(0)的当前线程被冻结了一下,让其他线程有机会优先执行。 Thread.Sleep(0) 是你的线程暂时放弃CPU,也就是释放一些未用的时间片给其他线程或进程使用,就相当于一个让位动作。我们可以这样理解,其实是让当前线程挂起,使得其他线程可以和当前线程再次的抢占CPU资源。
3. 由于CPU资源是有限的,所以进程中的多个线程要抢占CPU,这也导致进程中的多个线程交替执行。
好比说
人们在排队买东西
轮到你了,而你可能还没想好买什么或者在考虑什么,总之你不着急买
那么你可以让位,你可以Thread.Sleep(100)
让身后排队的100个人买了你再买
也可以Thread.Sleep(0)
让出一下
后边有人顶上了,你就排他后边
如果后边没人 那么你自然还可以排在你原来的位置上。
二:举例
1 delegate void OutPutDelegate(); 2 static void Main(string[] args) 3 { 4 Console.WriteLine("Now main thread begin"); 5 OutPutDelegate outPutDelegate = new OutPutDelegate(OutPutData); 6 Thread thread = new Thread(new ThreadStart(outPutDelegate)); 7 thread.Start(); 8 for (int i = 0; i < 5; i++) 9 { 10 Console.WriteLine(i); 11 Thread.Sleep(0); 12 } 13 Console.ReadKey(); 14 } 15 16 private static void OutPutData() 17 { 18 Console.WriteLine("Orther Thread"); 19 for (int i = 0; i < 10; i++) 20 { 21 Console.WriteLine(i); 22 } 23 Console.ReadKey(); 24 }
主线程挂起来了,资源重新分配,主线程和Orther Thread线程再次的抢占CPU资源,Orther Thread没有抢占到CPU资源,最后还是主线程抢到CPU资源了,所以先输出了0-4。
主线程挂起来了,资源重新分配,主线程和Orther Thread线程再次的抢占CPU资源,主线程抢到CPU资源了所以输出了数字1,Orther Thread一开始没抢到CPU资源,后来Orther Thread又抢占到了CPU资源输出了数字0-9,多个线程交替执行。
主线程挂起来了,资源重新分配,主线程和Orther Thread线程再次的抢占CPU资源,主线程没有抢到CPU资源,Orther Thread抢到CPU资源先输出了数字0-9。