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

線程的生命周期

等待 用戶輸入 art 決定 沒有 用戶 和數 自動 star

線程的生命周期:

1)初始狀態:此時線程只是處於JVM進程中,只是創建了一個線程對象,並沒有真正開始運行。

2)可動行狀態:調用線程對象的start()方法,此時線程才真正的被創建,進入可運行狀態,等待CPU的調度。“萬事俱備,只欠CPU”。

3)運行狀態:正在運行的線程,此時它擁有CPU的執行權。

4)阻塞狀態:運行狀態中的線程,如果正在等待用戶輸入或調用了sleep()和join()等方法都會導致線程進入阻塞狀態,註意從阻塞狀態出來的線程不一定馬上回到運行狀態,而是重新回到可運行狀態,等待CPU的再次調度。

5)等待隊列狀態:一個線程調用一個對象的wait()會自動放棄該對象的鎖標記,進入等待隊列狀態,只有當有另外一線程調用臨界資源的notify()或notifyAll()方法,建議多使用notifyAll(),才會將等待隊列中的線程釋放,此線程進入鎖池狀態。

6)鎖池狀態:每個對象都有互斥鎖標記,以防止對臨界資源的訪問造成數據的不一致,和數據的不完整性。一個線程擁有一個對象的鎖標記後,另一線程想訪問該對象,必須在鎖池中等待。由系統決定哪個線程拿到鎖標記並運行。註意從鎖池狀態出來的線程不是馬上回到運行狀態,而是重新回到可運行狀態,等待CPU的再次調度。

7)終止狀態:一個線程運行結束後稱為終止狀態,一個進程中只有所有的線程退出後才會終止。

線程的生命周期