更新時(shí)間:2022-12-07 11:42:46 來源:動力節(jié)點(diǎn) 瀏覽1370次
在Java教程中,大家會學(xué)到線程,線程是為執(zhí)行特定任務(wù)而創(chuàng)建的正在執(zhí)行的程序。Java 線程的生命周期從它的誕生開始,到它的死亡結(jié)束。
Thread 類的 start() 方法用于啟動線程的執(zhí)行并使線程進(jìn)入可運(yùn)行狀態(tài),而 Thread 類的 sleep() 和 wait() 方法使線程進(jìn)入不可運(yùn)行狀態(tài)。
在不可運(yùn)行狀態(tài)之后,線程再次進(jìn)入可運(yùn)行狀態(tài)并開始執(zhí)行。線程的run()方法非常重要。執(zhí)行完run()方法后,線程的生命周期就結(jié)束了。
線程的這些階段就是Java中線程的狀態(tài)。
要在程序中使用線程,識別線程狀態(tài)很重要。下圖展示了Java線程生命周期中的線程狀態(tài)。
線程是程序中的執(zhí)行路徑,它會經(jīng)歷線程的以下狀態(tài)。五種狀態(tài)如下:
新的
可運(yùn)行
跑步
阻塞(不可運(yùn)行狀態(tài))
死的
當(dāng) Thread 類的一個(gè)實(shí)例被創(chuàng)建時(shí),一個(gè)新線程就誕生了,并且已知處于 New-born 狀態(tài)。也就是說,當(dāng)一個(gè)線程誕生時(shí),它進(jìn)入了新的狀態(tài),但它的執(zhí)行階段還沒有在實(shí)例上開始。
簡單來說,Thread 對象創(chuàng)建了,但是它不能執(zhí)行任何程序語句,因?yàn)樗惶幱诰€程的執(zhí)行狀態(tài)。只能在新線程上調(diào)用 start() 方法;否則,將拋出IllegalThreadStateException 。
新生線程的第二階段是執(zhí)行階段。當(dāng)在線程的新實(shí)例上調(diào)用 start() 方法時(shí),它進(jìn)入可運(yùn)行狀態(tài)。
在可運(yùn)行狀態(tài)下,線程已準(zhǔn)備好執(zhí)行并等待處理器的可用性(CPU 時(shí)間)。有很多準(zhǔn)備執(zhí)行的線程,它們都在隊(duì)列(line)中等待。
如果所有線程的優(yōu)先級都相同,則CPU按照先到先得的方式為每個(gè)線程分配一個(gè)時(shí)隙執(zhí)行。為線程分配時(shí)間的過程稱為時(shí)間分片。線程可以從運(yùn)行、等待或新狀態(tài)進(jìn)入可運(yùn)行狀態(tài)。
運(yùn)行意味著處理器 (CPU) 已為線程分配時(shí)隙以供其執(zhí)行。當(dāng)線程調(diào)度程序從可運(yùn)行狀態(tài)中選擇一個(gè)線程執(zhí)行時(shí),它進(jìn)入運(yùn)行狀態(tài)??瓷蠄D。
在運(yùn)行狀態(tài)下,處理器將其時(shí)間交給線程執(zhí)行并執(zhí)行其運(yùn)行方法。它是線程執(zhí)行其實(shí)際功能的狀態(tài)。線程只能從可運(yùn)行狀態(tài)進(jìn)入運(yùn)行狀態(tài)。
正在運(yùn)行的線程可能會在以下任何一種情況下放棄其控制并進(jìn)入阻塞狀態(tài)。
當(dāng)線程調(diào)用 sleep() 方法休眠指定時(shí)間后,該線程在該時(shí)間段內(nèi)出隊(duì)列。一旦該時(shí)間段過去,線程將再次重新進(jìn)入可運(yùn)行狀態(tài)。
當(dāng)線程使用 suspend() 方法掛起一段時(shí)間以滿足某些條件時(shí)??梢允褂?resume() 方法恢復(fù)掛起的線程。
當(dāng)在線程上調(diào)用 wait() 方法等待一段時(shí)間??梢允褂?notify() 或 notifyAll() 方法再次運(yùn)行處于等待狀態(tài)的線程。
當(dāng)線程掛起、休眠或等待一段時(shí)間以滿足某些條件時(shí),線程被認(rèn)為處于阻塞狀態(tài)。
當(dāng)線程的 run() 方法完成語句的執(zhí)行時(shí),線程自動死亡或進(jìn)入死狀態(tài)。也就是說,當(dāng)線程從 run() 方法中退出時(shí),線程就被終止或死亡。當(dāng)調(diào)用 stop() 方法時(shí),線程也可能死掉。
在Java中線程的生命周期中,線程以多種方式從一種狀態(tài)移動到另一種狀態(tài)。這是因?yàn)樵?a href="/hot/1621.html" target="_blank" title="什么是多線程">多線程環(huán)境下,當(dāng)多個(gè)線程在執(zhí)行時(shí),一次只能有一個(gè)線程使用CPU。
所有其他線程都處于其他一些狀態(tài),要么等待打開 CPU,要么等待滿足某些條件。因此,一個(gè)線程總是處于這五種狀態(tài)中的任何一種。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743