1. 程式人生 > >Java線程生命周期

Java線程生命周期

inf 生產者消費者 span div 展示 函數 pan style mil

當你需要使用Java線程在多線程環境下進行編程時,理解Java的線程周期與線程的狀態是非常重要的。通過實現Runnale接口或者繼承Thread類,我們可以創建線程,為了啟動一個線程,我們需要創建一個Thread對象,並且調用它的start()方法,以便以線程的方式來執行run()方法。

Java中的線程生命周期

下面的圖展示在Java中線程的不同狀態,我們可以創建一個Java線程,並調用start()方法來啟動它,但是線程的狀態是如何從Running變為Blocked,這依賴與操作系統實現的線程調度算法,Java對此並沒有足夠的控制權。

技術分享圖片

New

當我們創建一個新線程對象的時候,需要時候new操作符,此時線程的狀態便是New。在這個時候,線程並不是可被調度的,它只是Java語言的一個內部狀態。

Runnable

當我們調用Thread對象的start()函數時,它的狀態變為Runnable。 控制權被給予線程調度程序來完成它的執行。 是否立即運行此線程或在運行之前將其保持在可運行線程池中,取決於線程調度程序的實現。

Running

線程正在執行時,狀態變為Running。 線程調度程序從可運行線程池中選擇一個線程,並將其狀態更改為正在運行,然後CPU開始執行這個線程。一個線程可以將正在運行的進程狀態更改為Runnable,Dead或Blocked。在該狀態時,線程將執行run()方法的邏輯。

Blocked/Waiting

一個線程可以通過join()方法,去等待另外一個線程的執行完成;也可以等待一些資源可用,

例如生產者消費者問題或IO資源,此時線程的狀態將變為Waiting。 線程等待狀態結束後,狀態變為Runnable,並移回到可運行線程池。

Dead

一旦線程完成執行,它的狀態就變成Dead。

(完)

Java線程生命周期