Java線程生命週期

當你須要使用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()方法的邏輯。spa

Blocked/Waiting

一個線程能夠經過join()方法,去等待另一個線程的執行完成;也能夠等待一些資源可用,例如生產者消費者問題或IO資源,此時線程的狀態將變爲Waiting。 線程等待狀態結束後,狀態變爲Runnable,並移回到可運行線程池。操作系統

Dead

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

(完)對象

相關文章
相關標籤/搜索