閱讀目錄
一:什麼是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)
讓出一下
後邊有人頂上了,你就排他後邊
如果後邊沒人 那麼你自然還可以排在你原來的位置上。
二:舉例
View Code
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。