天天看點

線程的生命周期詳解

線程的生命周期詳解
線程的生命周期詳解

導讀

與人有生老病死一樣,線程也同樣要經曆開始(等待)、運作、阻塞和結束四種不同的狀态。這四種狀态都可以通過Thread類中的方法進行控制。

一.線程的狀态

線程可以分為5個狀态:

  • New(建立)
  • Runnable(就緒)
  • Running(運作)
  • blocked(被阻塞)
  • Dead(死亡)

二.線程狀态詳解

1.New(建立)

當建立Thread類的一個執行個體(對象)時,此線程進入建立狀态(未被啟動)。

例如:Thread t1=new Thread();

某國皇帝非常寵愛一位妃子,人稱咖妃。這位妃子也非常争氣,入宮一年左右,就為皇上誕下一位小皇子。 咖妃非常希望自己的兒子當太子,但是要等待機會。

2.Runnable(就緒)

線程已經被啟動,正在等待被配置設定給CPU時間片,也就是說此時線程正在就緒隊列中排隊等候得到CPU資源。例如:t1.start();

日複一日,年複一年,皇帝原來越老,小皇子也越長越大,每天在目前的要求下,勤學苦讀,他和其他皇子一樣,等待着一個機會。

3.Running(運作)

線程獲得CPU資源正在執行任務(run()方法),此時除非此線程自動放棄CPU資源或者有優先級更高的線程進入,線程将一直運作到結束。

經過多年的考察,在大臣們的建議下,皇帝終于決定立儲君,由于小皇子格外聰穎,又勤學奮進,格外受皇帝賞識,經管他不是長子,皇帝還是力排衆議。選他作為太子,從此時此刻開始,他要跟着皇帝處理各種政務,管理國家。

4.blocked(被阻塞)

由于某種原因導緻正在運作的線程讓出CPU并暫停自己的執行,即進入堵塞狀态。

正在睡眠:用sleep(long t) 方法可使線程進入睡眠方式。一個睡眠着的線程在指定的時間過去可進入就緒狀态。

正在等待:調用wait()方法。(調用motify()方法回到就緒狀态)

被另一個線程所阻塞:調用suspend()方法。(調用resume()方法恢複)

某天深夜,一份密折改變了原本平和的生活。有人密奏皇帝,太子密謀造反,皇帝大怒,将太子貶為皇子,并下令六部徹查此事,凡是牽連之人一律嚴辦。面對對手制造的冤案,皇子一邊按兵不動,一邊也派人暗地裡調查此事,他又在等待一個機會,東山再起。

5.Dead(死亡)

當線程執行完畢或被其它線程殺死,線程就進入死亡狀态,這時線程不可能再進入就緒狀态等待執行。

自然終止:正常運作run()方法後終止

繼續閱讀