平時我們經常聽說asp.net頁面生命周期,大致是 創建頁面類,打造頁面控件樹,渲染響應輸出頁面(當然裡面還有很多管道執行處理事件)最後呈現在我們面前就是一個網頁(也就我們通常說的頁面生命周期!)
今天本人談談多線程的生命周期,如有不對還望包涵,多多指教!
首先上上圖:
class Program { static void Main(string[] args) { //創建線程 Thread thread = new Thread(run); thread.Start(); //主線程代碼 for (int i = 0; i < 100; i++) { Console.WriteLine("main--->"+i); } } static void run() { for (int i = 0; i < 100; i++) { Console.WriteLine("run"+i); } } }
為什麼會出現這種輸出情況呢?當然你們會想到不是多線程嘛,當然是可以切換的(不錯一下,這裡也就所謂的異步線程,要是同步線程必須等待另外一個線程結束才行,因為生活有的東西也必須用到同步,取錢就類似),沒錯這是線程產生的效果,這時候可能你會問,它們為什麼輸出結果有長有段呢?
下面給出一個圖來說說明它們為什麼產生這種效果:
新建狀態:我們運行Main方法(也就是創建線程,他是一個主線)默認調statrt--->就緒狀態
就緒狀態:表示有權限獲取cpu的時間片,就是獲取cpu分配執行這個線程的時間(說到這裡你可能會明白一些東西,為什麼相互切,為輸它輸出多一點,它要輸出少一點!當然是分配的時間長短不一樣!)----->運行狀態
運行狀:也就是就緒狀態拿到cpu分配的時間片之後就進入運行狀態
如輸出: main--->0 1 2 3 4 在輸入run 0 1 2 3 因為main線程分配的cpu時間片只有那麼一點時間如0.001s 運行狀態方法沒有執行完它的時間就用完了,從而進入
阻塞狀態,在去請求cpu分配執行時間片,當main時間片執行完了之後,thread線程它在創建的時候當然也分配時間。哥們你搞完了(搞完的是剛才的時間片哦),該我了!!!!
所以就一直這樣搞下去(當然接著上一次執行哦!),到線程銷亡(所以就出現我們看到的效果!)。
不從:上面輸出有長有短,就是獲取的cpu時間片長短不一樣!主線程的執行for 時候,執行到輸出 main 4 時間片就用完..同理run方也是一樣的!
下面上圖看程序輸出的不同結果!(看到效果再去看上面那個線程生命周期圖)
好了,就說到這裡,如有說的不對的地方,歡迎指出就好,方不要丟磚哦!