更新時間:2022-12-07 11:42:46 來源:動力節點 瀏覽1380次
在Java教程中,大家會學到線程,線程是為執行特定任務而創建的正在執行的程序。Java 線程的生命周期從它的誕生開始,到它的死亡結束。
Thread 類的 start() 方法用于啟動線程的執行并使線程進入可運行狀態,而 Thread 類的 sleep() 和 wait() 方法使線程進入不可運行狀態。
在不可運行狀態之后,線程再次進入可運行狀態并開始執行。線程的run()方法非常重要。執行完run()方法后,線程的生命周期就結束了。
線程的這些階段就是Java中線程的狀態。
要在程序中使用線程,識別線程狀態很重要。下圖展示了Java線程生命周期中的線程狀態。
線程是程序中的執行路徑,它會經歷線程的以下狀態。五種狀態如下:
新的
可運行
跑步
阻塞(不可運行狀態)
死的
當 Thread 類的一個實例被創建時,一個新線程就誕生了,并且已知處于 New-born 狀態。也就是說,當一個線程誕生時,它進入了新的狀態,但它的執行階段還沒有在實例上開始。
簡單來說,Thread 對象創建了,但是它不能執行任何程序語句,因為它不處于線程的執行狀態。只能在新線程上調用 start() 方法;否則,將拋出IllegalThreadStateException 。
新生線程的第二階段是執行階段。當在線程的新實例上調用 start() 方法時,它進入可運行狀態。
在可運行狀態下,線程已準備好執行并等待處理器的可用性(CPU 時間)。有很多準備執行的線程,它們都在隊列(line)中等待。
如果所有線程的優先級都相同,則CPU按照先到先得的方式為每個線程分配一個時隙執行。為線程分配時間的過程稱為時間分片。線程可以從運行、等待或新狀態進入可運行狀態。
運行意味著處理器 (CPU) 已為線程分配時隙以供其執行。當線程調度程序從可運行狀態中選擇一個線程執行時,它進入運行狀態。看上圖。
在運行狀態下,處理器將其時間交給線程執行并執行其運行方法。它是線程執行其實際功能的狀態。線程只能從可運行狀態進入運行狀態。
正在運行的線程可能會在以下任何一種情況下放棄其控制并進入阻塞狀態。
當線程調用 sleep() 方法休眠指定時間后,該線程在該時間段內出隊列。一旦該時間段過去,線程將再次重新進入可運行狀態。
當線程使用 suspend() 方法掛起一段時間以滿足某些條件時。可以使用 resume() 方法恢復掛起的線程。
當在線程上調用 wait() 方法等待一段時間。可以使用 notify() 或 notifyAll() 方法再次運行處于等待狀態的線程。
當線程掛起、休眠或等待一段時間以滿足某些條件時,線程被認為處于阻塞狀態。
當線程的 run() 方法完成語句的執行時,線程自動死亡或進入死狀態。也就是說,當線程從 run() 方法中退出時,線程就被終止或死亡。當調用 stop() 方法時,線程也可能死掉。
在Java中線程的生命周期中,線程以多種方式從一種狀態移動到另一種狀態。這是因為在多線程環境下,當多個線程在執行時,一次只能有一個線程使用CPU。
所有其他線程都處于其他一些狀態,要么等待打開 CPU,要么等待滿足某些條件。因此,一個線程總是處于這五種狀態中的任何一種。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習